比较通用T与新T()始终为false

时间:2019-05-10 15:19:16

标签: c# generics compare

我有一个泛型函数(对象,对象),参数之一可以是new() 当我尝试将对象与new()比较时,它总是错误的。

public static void TestFunction<T>(object requestData, object storedData) where T : class, new()
{
    if (requestData != null && storedData != null)
        if (requestData?.GetType().Name != storedData?.GetType().Name)
        { throw new Exception("object types are not match"); return; }
    if (requestData == null) throw new Exception("request can not be null");

    ```
    //storedData might be new T()
    // but even i am creating new objects to compare inside function - no luck
    ```

    object o = (T)Activator.CreateInstance(typeof(T));
    object o1 = (T)Activator.CreateInstance(typeof(T));
    object o2 = new T();

    T test = new T();

    ```//all return false
    o.Equals(o1).Dump();
    test.Equals(new T()).Dump();
    o2.Equals(o).Dump();

}

我希望比较是正确的。

1 个答案:

答案 0 :(得分:1)

默认对象比较始终通过引用指针进行。 new T()总是会有一个新的引用。