我有一个“MyObject”类型的对象列表。该类包含orderedDictionary。我想在泛型函数中使用orderedDictionary
public class MyObject
{
public OrderedDictionary Columns { get; set; }
}
我的通用功能
private void KeepSelectedColumns<T>(List<T> OperateList)
{
List<string> ToBeRemoved = new List<string>();
foreach (T fVal in OperateList)
{
// error in fVal.Columns
foreach (DictionaryEntry Col in fVal.Columns)
{
...
...
}
}
}
编译器错误是'T'不包含'Columns'的定义,并且没有扩展方法'Columns'可以找到接受类型'T'的第一个参数(你是否缺少using指令或汇编引用? )
答案 0 :(得分:1)
如果你想将这个类型用于你的衍生物MyObject,那么就像这样约束
private void KeepSelectedColumns<T>(List<T> OperateList) where T : MyObject
{
List<string> ToBeRemoved = new List<string>();
foreach (T fVal in OperateList)
{
// error in fVal.Columns
foreach (DictionaryEntry Col in fVal.Columns)
{
}
}
}
答案 1 :(得分:1)
由于您对T
的类型没有任何限制,它可以是“任何” - 但不是您可以传入的所有内容,因为类型参数T
具有成员属性名为Columns
,因此编译器会抱怨。
例如,您可以传入List<int>
,因为这会满足参数,但int
没有Columns
成员。
你确定要在这里使用泛型吗?除非你使用MyObject
作为其他类的基类,否则你需要明确“非通用”的行为 - 它太具体了。
如果MyObject
是基类,您可以使用泛型但需要提供更多类型约束 - 您的函数签名将如下所示:
private void KeepSelectedColumns<T>(List<T> OperateList) where T : MyObject
有关类型约束的详细信息,请参阅here。