空检查扩展方法

cae*_*say 8 c# linq resharper null-check

所以,我在应用程序中做了很多数据库工作 - 我的缓存系统有几个可能的返回值.它可以返回null,它可以返回默认值(类型),也可以返回无效对象(无效对象,我的意思是属性/值不正确).我想创建一个扩展方法来为我做所有这些检查,如下所示:

    public static bool Valid<T> (this T obj) where T: class
    {
        if (obj == null) 
            return false;
        else if (obj == default(T))
            return false;
        //Other class checks here
        else 
            return true;
    }
Run Code Online (Sandbox Code Playgroud)

问题是,我的编译器告诉我if (obj == default(T))将永远是假的.

这是为什么?

Ree*_*sey 21

既然你有一个"类"约束(where T: class),default(T)始终等于空.您已经在原始if语句中检查了它,因此第二种情况(obj == default(T))永远不会为真.