2013-07-18 25 views
1

我有一個方法:當所需的參數爲空時,如何在泛型方法中不指定類型參數?

public HttpRequestMessage CreateRequest<T>(T genericObject = default(T)) 
{ 
    ... 
    if (!Equals(genericObject, default(T))) 
    ... 
} 

我可以把它叫做:

var request = CreateRequest<int>(); 

看到,因爲我不實際使用的默認類型(我想它在默認情況下設置爲null)當我調用方法時,如何停止將泛型類型定義爲int(或者其他類型)?

編輯 問題是,我通常需要指定一個類型並使用參數。但有時我不需要使用參數,我希望它被設置爲空或零,而不是在上面的示例中寫入類似'int'的隨機類型。

+1

這真的不清楚你的意思 - 對編譯器的需求*一些*指示什麼'T'應該是... –

+0

'null'不是一種類型。您需要指定您希望方法返回的內容,或者寫出一些具有某種返回類型的非泛型方法。 – Romoku

回答

1

您不能,導致是您的方法的簽名。

您可以創建另一種方法,它沒有任何通用參數,這樣你就可以把它想:

var request = CreateRequest(); 
+0

這是正確的答案!通用方法總是需要對象類型引用。如果爲空,則表示不需要,則需要非泛型方法。 – CarlosB

+0

問題是,我通常需要指定一個類型並使用參數。不過有時我不需要使用參數,我希望它被設置爲Null或Zero,而不是在上面的例子中寫入像'int'這樣的隨機類型。 – AntonJ

+0

@AntonJ:這是架構決定,所以請記住使用和不使用參數的頻率,並且添加或不添加沒有任何泛型參數的方法。這一切都取決於你的方便。 – Tigran

0

我不認爲你可以。對於泛型函數,您必須指定泛型參數,或者必須傳遞可以從中推斷泛型參數的內容。

爲了解決它,你可以寫一個非泛型包裝器。

相關問題