【发布时间】:2016-04-07 06:04:31
【问题描述】:
我附上了一张我正在尝试做的事情的图片。假设我有一个类中的 T 列表
public class MyClass<T>
where T : IMyInterface
{
public List<T> list = new List<T>;
}
现在,另一个类有一个 MyClass 列表。
public class AnotherClass
{
public List<MyClass<IMyInterface>> list = new List<MyClass<IMyInterface>>;
}
我应该为 MyClass 放置什么 T?如果我输入 T,那么它假定该类中的所有类型都是相同的,但事实并非如此。如果我放 IMyInterface,在访问这些类时我无法将 IMyInterface 强制转换为 T。
new AnotherClass().list.Add(new MyClass<T>());
现在这里的类型是什么? AnotherClass 泛型类型中的列表是 IMyInterface,但我要添加的是 T,我希望它是动态的,但它们仍在 IMyInterface 下。
【问题讨论】:
-
问题在于您描述的是问题的解决方案,而不是实际问题。你想解决什么??? (XY Problem).
-
我已经有一段时间没有使用 c# 了,但我不会使用泛型。如果您知道您只将实现您的接口的对象放入其中,那么为什么不使用多态。这意味着: public List
list=new List ; -
你似乎把事情搞糊涂了。泛型不是动态类型的。 C# 中的所有内容都是静态类型的,除了涉及
dynamic关键字的语句/声明,但这与泛型无关。List<int>是一个仅包含ints 的列表。a List<IMyInterface>是一个列表,仅包含实现IMyInterface的对象。
标签: c# list class generics dynamic