从IList <interface>参考中获取具体类的类型

时间:2017-12-10 08:23:10

标签: c# list interface

我想从IList的引用中获取对象的类型

public interface A
{
}  
public class B : A
{
//Some properties
}
public class C : A
{
//Some properties
}
List<B> b = new List<B>();
IList<A> a = new List<A>(b);
Type type = a.GetType();
if(type == typeof(IList<B>)){
//some code
}else if(type == typeof(IList<C>)){
//Some code
}

类型应该是B的列表,因为创建了B列表的对象。

IList<A>

2 个答案:

答案 0 :(得分:0)

试试这个;

            List<B> b = new List<B>()
            {
                new B {Sample = "Sample" }
            };
            IList<A> a = new List<A>(b);
            var typeList = a.GroupBy(x => x.GetType()).Select(type => type.Key).ToList(); 
            // Getting different types and grouping them
            if (typeList.Count == 1)
            {
                if (typeList[0] == typeof(B))
                {
                    //some code
                }
                else if (typeList[0] == typeof(C))
                {
                    //Some code
                }
            }
            else
            {
                //There are multiple different types in the list
            }

您想要比较具有实现类型的列表元素,您可以通过将项目分组为Type来比较它。

答案 1 :(得分:0)

尝试这种方法,但它只适用于没有空列表。

public static void Main()
{
    IList<B> b = new List<B>(){ new B() };
    IList<A> a = new List<A>(b);

    if(a.All(x=>x is B))
        Console.WriteLine("B");
    else if(a.All(x=>x is C))
        Console.WriteLine("C");
    else
        Console.WriteLine("A");
}