为什么resharper提出以下建议?

Jer*_*eir 7 c# resharper

我的代码是......

public static void AssertNotNull<T>(string name, T val) {
    if (val == null)
        throw new ArgumentNullException(String.Format("{0} must not be null", name));
}
Run Code Online (Sandbox Code Playgroud)

Resharper推荐......

public static void AssertNotNull<T>(string name, T val) {
    if (Equals(val, default(T)))
        throw new ArgumentNullException(String.Format("{0} must not be null", name));
}
Run Code Online (Sandbox Code Playgroud)

Bea*_*rdo 13

因为它不知道是否T是值类型或引用类型,所以它使代码适用于两者.

  • 在这种情况下,我实际上不同意Resharper,如果这就是它给出错误的原因.想想看,如果T是一个int,并且值IS实际为0并且应该为零,它将抛出异常,而如果检查null,则不会抛出异常. (2认同)

Mic*_*ows 12

我是Berado的第二个答案,但是会补充一点,你可以通过添加下面的约束来防止这种情况:

public static void AssertNotNull<T>(string name, T val) where T : class
Run Code Online (Sandbox Code Playgroud)