簡體   English   中英

非泛型類型中的通用方法

[英]Generic methods in non-generic types

當你有一個方法,如:

public static T DoSomething<T> ( params T [ ] input )

C#允許您在不指定T的情況下調用它,如:

DoClass.DoSomething ( "1", "2", "3" );

編譯器是否根據傳遞給它的方法計算出T?

這是一個很好的約定(在這種情況下省略T)?

是的,編譯器可以在大多數情況下推斷泛型類型參數。 (除非是你的類型是lambda表達式,如果我沒記錯的話。)

通常認為在推斷出通用參數時省略通用參數是非常好的做法。 事實上,我會說它增加了一定的可讀性(指定它們通常是多余的)。

是的,編譯器通常會找出類型。 它被稱為“類型推斷”。

是的,將T留在呼叫站點是最佳做法。 您編寫的代碼越少,以后需要閱讀和理解的代碼越少。

如果你有ReSharper ,那么它會很好地向你展示你可以去哪里,並且無法通過移除呼叫站點來逃脫。 否則你可以嘗試將其取出,如果代碼編譯,那么你不需要它。

是的,當編譯器能夠確定T應該是什么時,指定它是多余的。 我發現這是一個很棒的功能,因為當類型名稱總是列出時(特別是長名稱),它會變得乏味且難以閱讀。

正如許多人所提到的,這是由於編譯器的泛型參數類型推斷。 它通過第一個參數直接發現類型。

另一件事 - 如果您閱讀.net庫的設計指南,實際上建議您以可以推斷類型的方式編寫所有通用方法。 根據設計指南書,不可推理的通用方法被認為更難理解,應盡可能避免。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM