![](/img/trans.png)
[英]How to typecast in c# with T type and access its property and variables
[英]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.