C#中沒有辦法讓編譯器根據返回類型推斷泛型類型。
List<Customer> customer = getList<Customer>("blah");
這個方法應該寫成:
在C#中,你必須要是唯一的區別是返回類型指定牛逼
List<T> getList<T>(string whatever) { ... }
然而,在C#中,類型推斷是自動如果有一個參數需要某種類型的客戶,則進行處理。例如,你可以有:
List<T> MakeList<T>(params T[] items) { ...}
然後調用此爲(無<Customer>
):響應
Customer one = GetCustomer(1);
Customer two = GetCustomer(2);
var customers = MakeList(one, two);
編輯評論:
如果你將要構建一個新的「客戶」在你的方法中,並且希望這可以用於任何類型,你需要一個新的約束。有這樣的:
你會需要這樣的東西:
List<T> GetList<T>(string whatever)
where T : new() // This lets you construct it internally
{
List<T> results = new List<T>();
/// ...
T newInstance = new T();
results.Add(newInstance);
return results;
}
話雖這麼說,如果你打算做一個方法是這樣,那麼你還需要有一個約束的接口,所以你可以設置你創建對象:
List<T> GetList<T>(string whatever)
where T : ISomeInterface, new()
這將讓你使用的ISomeInterface
性能的方法中,以及將其限制爲只與即時通訊工作類型感謝那個接口。
那麼,如何在該方法可以確定哪種類型實例化添加到我的列表? – sproketboy
@Dan:我剛剛編輯過 - 看看是否能回答你的問題......(跨語言概念總是很棘手,因爲它們在C#和Java中並不完全相同) –
謝謝。那塊石頭! :) – sproketboy