谈论性能,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();
答案 0 :(得分:1)
如你所知,列表[1]是Men
,这个例子是设计的。所以在这种情况下要么是相同的。
如果动态在您不知道精确类型的情况下变得有用,但您确实知道在运行时它将具有SomeMethod
或属性。
当然,如果类型假设错误,那么第一个会在
上抛出异常 var men = (Men)list[1];
行,而后者则在men.SomeMenMethod();
答案 1 :(得分:0)
如果可能,请不要使用其中之一。尝试使用不涉及强制转换的类型安全解决方案或dynamic
。
如果那是不可能的,那么转换更好,因为它更清晰,更安全类型(编译器可以检查Men
实际上是否有SomeMenMethod
),错误情况下的异常更清晰并且它不会偶然工作(如果你认为你有Men
,但你实际上有Woman
,它实现了相同的方法,它可以工作,但它可能是一个错误)。
你问过性能。除了你之外,没有人能够真正了解你的具体案例的表现。如果您真的关心表现,请始终以两种方式衡量。
但我的期望是dynamic
会慢得多,因为它必须在运行时使用类似迷你编译器的东西。它尝试在首次运行后缓存结果,但它仍然很可能不会比强制转换更快。