【发布时间】:2015-11-16 13:26:11
【问题描述】:
电话
List<SubClazz> subList1 = new List<SubClazz>();
List<SubClazz> subList2 = new List<SubClazz>();
FuzzyCompareCollection(subList1,subList2); //Compile Error
我是怎么做到的
FuzzyCompareCollection(subList1.Cast<SuperClazz>().ToList(),subList2.Cast<SuperClazz>().ToList());
方法定义
public static bool FuzzyCompareCollection<T>(List<T> list1, List<T> list2) where T : SuperClazz
{
if (list1.Count != list2.Count)
{
return false;
}
Dictionary<string, SuperClazz> dict1 = new Dictionary<string, SuperClazz>();
Dictionary<string, SuperClazz> dict2 = new Dictionary<string, SuperClazz>();
foreach (T item in list1)
{
dict1[item.ID] = item; //ID is an attribute of SuperClazz
}
foreach (T item in list2)
{
dict2[item.ID] = item;
}
bool equals = true;
foreach (string key in dict1.Keys)
{
try
{
equals = Util.ReflectiveEquals(dict1[key], dict2[key]);
if (!equals)
{
break;
}
}
catch (KeyNotFoundException e)
{
return false;
}
}
return equals;
}
我认为我应该能够调用该方法而无需将其转换为 SuperClazz,因为列表包含 SuperClazz 的子类型。 但是有办法吗?还是真的不可能,如果没有办法,你能向我解释为什么这行不通吗?
【问题讨论】:
-
你能把 SuperClazz 和 SubClazz 的定义贴出来吗?或者更具体地说,它们之间的关系是如何定义的?
-
与方法签名完美配合。请发布示例 SubClazz 和 SuperClazz 声明。可能是他们你缺少继承关系。
-
SubClazz 是否扩展了 SuperClazz?这应该。当它这样做时,代码编译没有错误。
-
是的 SubClazz 正在扩展 SuperClazz 但我无法编译它。但问题已得到解答,无论如何感谢您的尝试。
标签: c# list generics casting subtype