代码之家  ›  专栏  ›  技术社区  ›  Greg

测试是否与默认值相等

  •  43
  • Greg  · 技术社区  · 16 年前

    public void MyMethod<T>(T value)
    {
        if (value == default(T))
        {
            // do stuff
        }
    }
    

    错误: Operator '==' cannot be applied to operands of type 'T' and 'T'

    我不能用 value == null 因为 T
    我不能用 value.Equals(default(T)) 因为 value null
    测试是否与默认值相等的正确方法是什么?

    2 回复  |  直到 16 年前
        1
  •  96
  •   John K    13 年前

    避免拳击 struct / Nullable<T>

    if (EqualityComparer<T>.Default.Equals(value,default(T)))
    {
        // do stuff
    }
    

    这支持任何 T 那个工具 IEquatable<T> ,使用 object.Equals 作为备份,并处理 null etc(和提升的操作员)

    还有 Comparer<T>.Default 它处理比较测试。这个处理 那个工具 IComparable<T> ,回落到 IComparable 无效的 并解除了操作员的职务。

        2
  •  33
  •   Graviton    16 年前

    object.Equals(value, default(T))