[英]Generic function with convertable parameters
我想編寫一個通用函數,該函數接收一個列表作為參數。 如果列表為null,則應返回null。 如果列表包含有效項,則應返回第一項。 該函數應適用於所有原始數據類型,例如int,short,float,double等。
在我的示例中,我使用int:
var a = new List<int>();
a.Add(3);
Foo<int, int?>(a);
Foo<int, int?>(null);
private T Foo<G, T>(List<G> list)
{
if(list != null && list.Count > 0)
{
return list[0];
}
else
{
return default(T);
}
}
不幸的是,這不起作用,因為我沒有找到通用的約束,即證明了編譯器的int嗎? 可以轉換為int和short嗎? 簡而言之,等等...我只想用原始數據類型及其可為空的墜子和字符串來調用函數。
關於其他解決方案有什么想法嗎? :-)
編輯:
它也應該與字符串一起使用。 否則,Rene Vogts解決方案將起作用。
只需更改方法的返回類型,您只需要一個通用參數,就只能將其限制為(非空)值類型:
private T? Foo<T>(List<T> list) where T : struct
{
return list?.Count > 0 ? (T?)list[0] : null;
}
我認為不可能制作一個也可以處理諸如string
類的引用類型的方法。 但是對於引用類型,您始終可以使用LINQ的FirstOrDefault()
和空條件運算符:
List<string> list...
var result = list?.FirstOrDefault();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.