You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity/C#中如何遍历泛型值列表?能否将不同泛型类型的Dynamic<T>实例存入列表并统一调用方法?

问题解答

1. Unity/C#中遍历泛型值列表的方法

当然有!C#里的泛型列表List<T>本身就实现了IEnumerable<T>接口,最常用的遍历方式就是直接用foreach循环,比如:

// 示例:遍历字符串泛型列表
List<string> stringList = new List<string> { "玩家1", "玩家2", "玩家3" };
foreach (var playerName in stringList)
{
    Debug.Log(playerName); // Unity中打印内容
}

除此之外,你还可以用List<T>自带的ForEach方法(传入lambda表达式更简洁):

List<int> scoreList = new List<int> { 85, 92, 78 };
scoreList.ForEach(score => Debug.Log($"分数:{score}"));

如果需要复杂逻辑,还能结合LINQ(记得引入System.Linq命名空间)做过滤、转换后再遍历:

var highScores = scoreList.Where(score => score >= 90);
foreach (var score in highScores)
{
    Debug.Log($"高分:{score}");
}

2. 遍历不同泛型类型的Dynamic<T>实例并执行操作

你原本的代码逻辑是行不通的,因为List<Dynamic<T>>要求T是一个固定的具体类型——要么全是Dynamic<float>,要么全是Dynamic<Vector2>,没法把不同泛型参数的实例塞进同一个泛型列表里,毕竟Dynamic<float>和Dynamic<Vector2>是完全独立的类型,它们唯一的共同父类是object,直接用object列表又得强制转换,非常麻烦。

不过我们可以通过非泛型接口/抽象基类解决这个问题,核心是让所有Dynamic<T>都遵循同一个非泛型契约,这样就能把它们放进同一个基于契约的列表中统一处理。

具体实现步骤

第一步:定义非泛型接口

先创建一个不带泛型参数的接口,包含你要统一调用的SetDefaultValue方法:

public interface IDynamic
{
    void SetDefaultValue();
}

第二步:修改Dynamic<T>类实现接口

让你的泛型类继承并实现这个接口:

public class Dynamic<T> : IDynamic
{
    public T value;
    public T defaultVal;

    // 原本的方法现在同时满足接口契约
    public void SetDefaultValue()
    {
        value = defaultVal;
    }
}

第三步:创建接口列表并遍历

现在你就可以创建List<IDynamic>类型的列表,添加不同泛型参数的Dynamic<T>实例,然后遍历调用方法:

List<IDynamic> dynamics = new List<IDynamic>();
dynamics.Add(new Dynamic<float> { defaultVal = 0.0f });
dynamics.Add(new Dynamic<Vector2> { defaultVal = Vector2.zero });

// 遍历并统一调用SetDefaultValue
foreach (var item in dynamics)
{
    item.SetDefaultValue();
}

补充说明

这种方式完全可行,本质是利用面向对象的多态性——虽然每个Dynamic<T>的具体类型不同,但它们都遵循IDynamic的契约,所以可以统一处理。如果你不想用接口,也可以定义一个抽象基类(比如AbstractDynamic),把SetDefaultValue定义为抽象方法,让Dynamic<T>继承并实现它,效果是一样的。

内容的提问来源于stack exchange,提问作者bleat interteiment

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:17:34