C#-动态类型还是类型转换?
谈到性能,C#中什么更好?使用动态类型还是类型转换 像这样(只是一个例子,不是真正的实现):C#-动态类型还是类型转换?,c#,performance,dynamic,C#,Performance,Dynamic,谈到性能,C#中什么更好?使用动态类型还是类型转换 像这样(只是一个例子,不是真正的实现): var list=newlist(); 添加(新女性()); 列表。添加(新男性()); 列表。添加(新车()); ....... 在另一个代码中。。。。 var men=(men)列表[1]; 男人。一些男人方法(); 还是这个 var list = new List<dynamic>(); list.Add(new Woman()); list.Add(new Men()); list
var list=newlist();
添加(新女性());
列表。添加(新男性());
列表。添加(新车());
....... 在另一个代码中。。。。
var men=(men)列表[1];
男人。一些男人方法();
还是这个
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();
var list=newlist();
添加(新女性());
列表。添加(新男性());
列表。添加(新车());
....... 在另一个代码中。。。。
var men=列表[1];
男人。一些男人方法();
这个例子是精心设计的,正如您所知,列表[1]是一个男人
。所以在这种情况下,两者都是相同的
当您不知道确切的类型,但您知道在运行时它将有一个SomeMethod
或属性时,dynamic变得非常有用
当然,如果类型假设是错误的,那么第一个将在
var-men=(men)列表[1]代码>行,而后者在men.SomeMenMethod()上抛出异常代码>如果可能,不要使用任何一种。尝试使用不涉及强制转换或dynamic
的类型安全解决方案
如果这是不可能的,则强制转换更好,因为它更清晰、更安全(编译器可以检查Men
是否确实有SomeMenMethod
),发生错误时的异常更清晰,并且不会意外工作(如果你认为你有男人
,但实际上你有女人
,这实现了相同的方法,它是有效的,但可能是一个bug)
你问的是绩效。除了你之外,没有人能真正了解你的具体案例的绩效。如果你真的关心绩效,请始终从两个方面来衡量
但我的期望是动态会慢得多,因为它必须在运行时使用类似于迷你编译器的东西。它在第一次运行后尝试缓存结果,但很可能不会比强制转换快。对其进行分析以找出原因。编写一些同时调用该方法一百万次的代码,然后但我怀疑有两件事:1)您可能可以重写代码,以便知道列表中的对象类型,从而不需要强制转换;2)性能差异可以忽略不计。
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();