C#测试是否分配了变量

Col*_*nic 13 .net c# linq

我正在尝试编写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);

您可以default()在MSDN上阅读更多相关信息:

给定参数化类型T的变量t,语句t = null仅在T是引用类型时有效,并且t = 0仅适用于数值类型而不适用于结构.解决方案是使用default关键字,它将为引用类型返回null,为数值类型返回零.对于结构体,它将返回初始化为struct或null的结构的每个成员,具体取决于它们是值还是引用类型.对于可空值类型,default返回一个System.Nullable,它像任何结构一样初始化.