Ale*_*der 5 c# reflection casting upcasting
我有几个类,都来自相同的基类型.
class basetype{}
class TypeA : basetype{}
class TypeB : basetype{}
...
Run Code Online (Sandbox Code Playgroud)
其中许多存储在列表中.
List<basetype> myObjects
Run Code Online (Sandbox Code Playgroud)
与往常一样,这些类型中的每一种都必须以不同方式处理.现在我有几种处理它们的方法,以及一种将basetype作为参数的方法.
HandleTypes(TypeA obj){}
HandleTypes(TypeB obj){}
HandleTypes(basetype obj)
Run Code Online (Sandbox Code Playgroud)
目前,我的HandleAllTypes看起来像这样:
string name = obj.GetType().Name
switch(name)
{
case "TypeA":
return HandleTypes(obj as TypeA);
case "TypeB":
return HandleTypes(obj as TypeB);
....
}
Run Code Online (Sandbox Code Playgroud)
现在这是废话.有没有像这样的方式
HandleTypes(obj ?"as derived type"?)
Run Code Online (Sandbox Code Playgroud)
通过MSDN和其他来源搜索,一无所获.
怎么样
HandleTypes( obj as dynamic );
Run Code Online (Sandbox Code Playgroud)
?
当我不得不处理第三方课程时,我已经使用了几次.当有很多派生类时,它也会非常有用.
您可以轻松检查是否实现了处理功能:
try {
HandleTypes( obj as dynamic )
}
catch( RuntimeBinderException ex ) {
// not implemented
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |