簡體   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