我有3个班级:
class O
{
}
class A : O
{
}
class B : A
{
}
当我打电话给我的代码时:
List<O> myList = new List<O>();
myList.Add(new A());
myList.Add(new B());
foreach (O obj in myList)
{
if (obj is A)
{
// do something
}
else if (obj is B)
{
//do something
}
}
但是我意识到即使我的if (obj is A)
属于true
,obj
也会被评估为class B
。有没有办法编写语句,以便当{且仅obj
class B
为{{1}}时,它的计算结果为真?
答案 0 :(得分:3)
为什么不在基类中定义虚函数并在派生类型中覆盖它,在不同的情况下执行您需要的操作?
class O {
public virtual void DoSomething() {
// do smtgh in the 'O' case
}
}
class A : O {
public override void DoSomething() {
// do smtgh in the 'A' case
}
}
class B : A {
public override void DoSomething() {
// do smtgh in the 'B' case
}
}
然后你的循环变为
foreach (O obj in myList) {
obj.DoSomething();
}
答案 1 :(得分:0)
有两种方法GetType
和typeof
GetType是对象的一种方法。它提供了一个Type对象,一个 表示对象实例的派生类型最多。
和
Typeof返回Type对象。它通常用作参数或作为参数 变量或字段。 typeof运算符是表达式的一部分 获取类或值类型的类型指针
试试这个
if(obj.GetType() == typeof(A)) // do something
else if(obj.GetType() == typeof(B)) //do something