不想使用Cast方法

时间:2016-04-21 13:43:40

标签: c# .net casting

我有一个抽象类

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

有什么更好的方法可以做到这一点?

3 个答案:

答案 0 :(得分:0)

如果您可以将abcxyz参数的类型更改为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