我有一个名为“ClassA”的超类和两个子类“Class1”和“Class2”。
我有一个包含“Class1”和“Class2”对象的列表,该列表的类型为“ClassA”。
我想通过执行类似
List<ClassA> AList = new List<ClassA>;
AList.Add(new Class1());
AList.Add(new Class2());
foreach (Class1 c1 in AList)
{
// Do Something
}
但是当我这样做时,代码在到达不属于“Class1”类型的对象时会抛出异常。
如何以简单的方式完成此操作,而无需检查列表中对象的类型,如果它是正确的类型,则将其强制转换。像这样:
foreach (ClassA cA in AList)
{
if (cA.GetType() == typeof(Class1))
{
// Do Something
}
}
答案 0 :(得分:13)
使用LINQ:
foreach (Class1 c1 in AList.OfType<Class1>()) { }
请注意,如果要检查循环中的类型,as
和is
运算符就是为此而设的。像:
foreach (ClassA cA in AList) {
Class1 c1 = cA as Class1;
if (c1 != null) {
// do something
}
}
答案 1 :(得分:2)
foreach(Class1 c1 in AList.OfType<Class1>())
{
//do something
}