繁体   English   中英

C#-动态类型还是类型转换?

[英]C# - Dynamic Type or Typecast?

谈到性能,C#有什么更好的选择? 使用动态类型还是Typecast?

像这样(只是一个例子,不是真正的实现):

var list = new List<object>();
list.Add(new Woman());
list.Add(new Men());
list.Add(new Car());
....... in another code ....
var men = (Men)list[1];
men.SomeMenMethod();

或这个

var list = new List<dynamic>();
list.Add(new Woman());
list.Add(new Men());
list.Add(new Car());
....... in another code ....
var men = list[1];
men.SomeMenMethod();

如您所知list [1]是Men该示例是人为设计的。 因此,在那种情况下两者是相同的。

在您不知道精确类型的地方,动态变得很有用,但是您知道在运行时它将具有SomeMethod或属性。

当然,如果类型假设错误,则第一个会在

var men = (Men)list[1]; 行,而后者在men.SomeMenMethod();上抛出异常men.SomeMenMethod();

如果可能,不要使用任何一个。 尝试使用不涉及Cast或dynamic类型安全解决方案。

如果这是不可能的,则转换会更好,因为它更清晰,更类型安全(编译器可以检查Men确实具有SomeMenMethod ),如果出现错误,则异常会更清楚,并且不会偶然发生(如果您认为您有Men ,但实际上您有Woman ,它实现了相同的方法,可以正常工作,但这可能是一个错误)。

您询问性能。 除了您之外,没有人真正知道您的特定案件的执行情况。 如果您真的很在意性能,请务必同时衡量两种情况。

但是我的期望是dynamic会慢得多,因为它必须在运行时使用类似微型编译器的东西。 它会在第一次运行后尝试缓存结果,但是仍然很可能不会比强制转换更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM