这就是我想要实现的目标,有没有一种优雅的方法可以做到这一点?
public class item
{
}
public class A : item
{
public int a;
}
public class B : item
{
public string b;
}
public class example
{
A classA = new A();
B classB = new B();
item[] itemArray = {classA, classB}
foreach(item i in itemArray)
{
// get int a if item i is ofType A
// get string b if item i is ofType B
}
}
我尝试过重写,但这迫使我在基类中创建a和b的虚拟字段。必须有更好的方法。
这可能是最好的方法,我觉得很傻,因为我没有考虑简单地将其转换为正确的类。
public class example
{
A classA = new A();
B classB = new B();
item[] itemArray = {classA, classB}
foreach(item i in itemArray)
{
if(i.GetType() == Type.GetType("A"))
{
A blabla = (A)i;
Console.WriteLine(blabla.a);
}
}
}
以下是应该如何做到的:
void Main()
{
A classA = new A() { a = 42 };
B classB = new B() { b = "Foo" };
Item[] itemArray = new Item[] { classA, classB };
foreach (Item i in itemArray)
{
if (i is A i_as_A)
{
Console.WriteLine(i_as_A.a);
}
if (i is B i_as_B)
{
Console.WriteLine(i_as_B.b);
}
}
}
public class Item { }
public class A : Item
{
public int a;
}
public class B : Item
{
public string b;
}
如果我运行,我会得到:
42
Foo