我正在尝试编写Linq MinBy扩展方法
public static class Extensions
{
public static T MinBy<T>(this IEnumerable<T> source, Func<T,int> selector)
{
T min;
int? minKey = null;
foreach (var x in source)
{
var key = selector(x);
if (minKey == null || key < minKey)
{
minKey = key;
min = x;
}
}
if (minKey == null)
{
throw new ArgumentException("source should not be empty");
}
return min;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为我的逻辑是正确和可读的.但是我遇到了构建错误
使用未分配的局部变量'min'
我该怎么办?我可以测试变量是否已分配?
澄清:MinBy函数可以回答以下问题.哪个数字[-5,-2,3]具有最小的平方?
> new List<int>{-5,-2,3}.MinBy(x => x*x)
-2
Run Code Online (Sandbox Code Playgroud)
.NET的Min函数回答了一个不同的问题(这是最小的正方形)
> new List<int>{-5,-2,3}.Min(x => x*x)
4
Run Code Online (Sandbox Code Playgroud)
Fil*_*erg 24
您需要一个默认值,min如下所示:
T min = default(T);
给定参数化类型T的变量t,语句t = null仅在T是引用类型时有效,并且t = 0仅适用于数值类型而不适用于结构.解决方案是使用default关键字,它将为引用类型返回null,为数值类型返回零.对于结构体,它将返回初始化为struct或null的结构的每个成员,具体取决于它们是值还是引用类型.对于可空值类型,default返回一个System.Nullable,它像任何结构一样初始化.