使用long if else语句或使用反射进行转换

时间:2011-12-05 07:09:04

标签: c# reflection casting

我有一个性能问题,使用C#over .Net4。

我得到一个分布式对象,我需要将其转换为多种类型中的一种。我的问题是:哪种方式更好?

  1. 使用long if else(!= null)语句强制转换它。
  2. 使用反射获取对象的类型并使用一个成功的强制转换。

2 个答案:

答案 0 :(得分:1)

我认为这里没有比“简介”更好的答案,尤其是在不知道你有多少类型的情况下。

答案 1 :(得分:1)

如果可能的话,使用虚方法和多态 - 那么你不需要做任何事情 - 你只需要调用:

obj.SomeVirtualMethod(args);

virtual / override等找出要做的事情。

如果对象在您的控制之下,并且您指的是特定基类型的子类型,那么我会考虑添加一个鉴别器,即显示基础类型性质的枚举属性,即

Foo foo = ...
switch(foo.Actual)
{
    case FooType.Alpha: DoSomethingWith((Alpha) foo); break;
    case FooType.Beta: DoSomethingElseWith((Beta) foo); break;
    ...
}

有关此框架/ BCL示例,请查看Expression.NodeType。

对于基元(long等),请查看Type.GetTypeCode(),它再次允许切换使用。如果它不是原始的,你可以通过在某个地方的字典中预先注册预期的类型来做类似的事情,让你(再次)翻到switch