代码之家  ›  专栏  ›  技术社区  ›  Matt Mills

有理由这样做类型比较吗?

  •  3
  • Matt Mills  · 技术社区  · 14 年前

    if (true)
    {
        ...
    }
    

    直觉上很清楚某人在做出改变时要么懒惰要么过于谨慎。我今天偶然看到了这个片段,我很好奇这样做类型比较是否有功能上的区别:

    private static bool logField(Type t, string fieldname)
    {
        if (t.ToString() == typeof (Property).ToString())
        {
            ...
        }
        return true;
    }
    

    private static bool logField(Type t, string fieldname)
    {
        if (t == typeof (Property))
        {
            ...
        }
        return true;
    }
    
    5 回复  |  直到 14 年前
        1
  •  0
  •   Sam    14 年前

    不,获取同一类型的两个实例的type对象将始终返回对内存中同一类型对象的引用。这意味着执行引用相等性检查(=)就足够了。

    if(t.ToString()==typeof(Property).ToString())

    将对同一对象调用ToString()两次,其中t是“Property”类型。

        2
  •  6
  •   Jon Skeet    14 年前

    可以 typeof(Property) 从一个文件加载,但是 t

    正常地 首先要避免。。。但只是 可能的

        3
  •  3
  •   Diego Mijelshon    14 年前

    我想不出什么好理由。

    事实上,如果 t

        4
  •  1
  •   duraz0rz    14 年前

    第一种方法比较字符串的引用,而第二种方法实际检查t是否属于属性类型。

    第一个字符串总是“正确的”,因为两个字符串引用同一个对象,但是第二个字符串是检查t是否属于属性类型的正确方法。

    进行类型检查的一种等效且更具可读性的方法是

    if (t is Property)
    
        5
  •  0
  •   Jerod Houghtelling    14 年前

    我想说,第一种方法可能是由一个不熟悉C#的人完成的,不一定是懒惰。字符串比较在大多数情况下都有效,但以下情况除外:

    1. 如果 t 如果为null,则会引发null引用异常。
    2. 它不考虑名称空间。