簡體   English   中英

具有可轉換參數的泛型函數

[英]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.

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