我想写一个通用函数,它接收一个列表作为参数。如果列表为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解决方案将起作用。
答案 0 :(得分:5)
只需更改方法的返回类型,您只需要一个泛型参数,限制为(非可空)值类型:
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();