我想从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>
答案 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");
}