我有一个抽象类
public abstract ElementInfo : IElementMap, ISection
我有一个接受List<类型的参数的方法IElementMap>
public static IDictionary<int,int> GetOneToOneMap( List<IElementMap> abc, List<IElementMap> xyz,double asd)
现在我有一个ElementInfo类型的List对象
List<ElementInfo> analyinfo;
当我调用方法GetOneToOneMap
时,我正在将第一个参数发送为analyinfo.Cast<IElementMap>
,但我不想使用.Cast
有什么更好的方法可以做到这一点?
答案 0 :(得分:0)
如果您可以将abc
和xyz
参数的类型更改为IEnumerable<IElementMap>
,那么您可以传递List<ElementInfo>
作为参数。
这是可能的,因为IEnumerable<T>
中的T
是协变的。
这样的事情:
public static IDictionary<int,int> GetOneToOneMap(IEnumerable<IElementMap> abc,
IEnumerable<IElementMap> xyz,
double asd)
{
...
}
然后可以这样打电话:
List<ElementInfo> list1 = ...;
List<ElementInfo> list2 = ...;
GetOneToOneMap(list1, list2, 123);
另一个解决方案是使用泛型,如下:
public static IDictionary<int, int> GetOneToOneMap<T>(IEnumerable<T> abc,
IEnumerable<T> xyz,
double asd) where T : IElementMap
答案 1 :(得分:0)
您的列表可以是IElementMap类型,添加到其中的项目可以是ElementInfo类型。
List<IElementMap> analyinfo=new List<IElementMap> {objects of ElementInfo};
这样,您无需在传递给GetOneToOneMap方法时转换analyinfo。
答案 2 :(得分:-1)
也许, Enumerable.OfType是你的朋友 (https://msdn.microsoft.com/de-de/library/bb360913(v=vs.110).aspx)