c# сравнивают два универсальных значения [дубликат]

Я знаю, что все вы столкнулись с подобной задачей, но весь смысл в том, чтобы переделать исходное состояние. React не ориентирован на работу с вложенными состояниями.

this.state = {
    name: '',
    surname: '',
    street: '',
    city: ''
}
68
задан Community 23 May 2017 в 10:31
поделиться

4 ответа

Вы не можете использовать операторы на универсальных типах (за исключением нечто == пустой указатель, который является особенный в корпусе), если Вы не добавляете где T: класс для указания на это является ссылочным типом (затем нечто ==, панель законна)

Использование EqualityComparer<T>.Default, чтобы сделать это для Вас. Это будет не работа над типами, которые только предоставляют перегрузку оператора для == без также также:

  • реализация IEquatable<T>
  • объект переопределений. Равняется ()

В общей реализации == оператор и не также выполнение, по крайней мере один из них был бы очень плохой идеей так или иначе, таким образом, это вряд ли будет проблемой.

public bool IsDataChanged<T>()
{           
    T value1 = GetValue2;
    T value2 = GetValue1();

    return !EqualityComparer<T>.Default.Equals(value1 , value2);
}

, Если Вы не ограничиваете IEquatable<T> затем, нейтрализация значения по умолчанию EqualityComparer может вызвать упаковку при использовании с типами значения, если они не реализуют IEquatable<T> (если Вы управляете типами, которые используются, это не может иметь значения). Я предполагаю, что Вы использовали =! для производительности, хотя настолько ограничивающий Универсальным типом избежит случайный упаковка через Объект. Равняется (возражают) маршруту.

123
ответ дан Winner Crespo 24 November 2019 в 14:15
поделиться

Это должно работать на Вас.

public bool test<T>(T test, T test2) where T : class
{
    return (test != test2);
}

Это просто вставляется от примеров, которые были прокомментированы Ваш вопрос.

4
ответ дан Sylvain Rodrigue 24 November 2019 в 14:15
поделиться

Ваш тип должен реализовать IComparable или интерфейс IEquatable.

, Вероятно, затем необходимо переписать a! =b как! (== b), или называют CompareTo () или Равняется () методу явно.

3
ответ дан devio 24 November 2019 в 14:15
поделиться

Можно перегрузить.Equals () метод на объектах и изменить оценку на:

return (!valueInDB.Equals(valueFromView));

Предположение, что valueInDB и valueFromView являются объектами. Ваши переменные в качестве примера не называют тем же как используемые в сравнивании, таким образом, я должен был принять.

РЕДАКТИРОВАНИЕ: был разбит на 3 секунды! Примечание по перегрузке, если необходимо сравнить значения в типе, основной.Equals () от Класса объекта, не будет достаточно, как это только сделает, память выдерживает сравнение для составных типов. Необходимо будет перегрузить и обеспечить реализацию того, как Вы хотите, чтобы объект был сравнен.

0
ответ дан Jay S 24 November 2019 в 14:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: