我有几个类,它们都派生自相同的基类型。
class basetype{}
class TypeA : basetype{}
class TypeB : basetype{}
...
其中一些存储在列表中。
List<basetype> myObjects
与往常一样,这些类型中的每一种都必须以不同的方式处理。现在我有几种方法来处理它们,一种方法将基类型作为参数。
HandleTypes(TypeA obj){}
HandleTypes(TypeB obj){}
HandleTypes(basetype obj)
目前,我的 HandleAllTypes 看起来像这样:
string name = obj.GetType().Name
switch(name)
{
case "TypeA":
return HandleTypes(obj as TypeA);
case "TypeB":
return HandleTypes(obj as TypeB);
....
}
现在这是废话。有没有办法像
HandleTypes(obj ?"as derived type"?)
通过 MSDN 和其他来源进行搜索,一无所获。
最佳答案
怎么样
HandleTypes( obj as dynamic );
?
当我不得不处理第三方类时,我已经使用过几次。当有很多派生类时,它也会非常有用。
您可以轻松检查处理功能是否已实现:
try {
HandleTypes( obj as dynamic )
}
catch( RuntimeBinderException ex ) {
// not implemented
}
关于c# - 在 C# 中向上转换并根据派生类型调用特定方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6844508/