繁体   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