Я знаю, что все вы столкнулись с подобной задачей, но весь смысл в том, чтобы переделать исходное состояние. React не ориентирован на работу с вложенными состояниями.
this.state = {
name: '',
surname: '',
street: '',
city: ''
}
Вы не можете использовать операторы на универсальных типах (за исключением нечто == пустой указатель, который является особенный в корпусе), если Вы не добавляете где 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>
(если Вы управляете типами, которые используются, это не может иметь значения). Я предполагаю, что Вы использовали =! для производительности, хотя настолько ограничивающий Универсальным типом избежит случайный упаковка через Объект. Равняется (возражают) маршруту.
Это должно работать на Вас.
public bool test<T>(T test, T test2) where T : class
{
return (test != test2);
}
Это просто вставляется от примеров, которые были прокомментированы Ваш вопрос.
Ваш тип должен реализовать IComparable или интерфейс IEquatable.
, Вероятно, затем необходимо переписать a! =b как! (== b), или называют CompareTo () или Равняется () методу явно.
Можно перегрузить.Equals () метод на объектах и изменить оценку на:
return (!valueInDB.Equals(valueFromView));
Предположение, что valueInDB и valueFromView являются объектами. Ваши переменные в качестве примера не называют тем же как используемые в сравнивании, таким образом, я должен был принять.
РЕДАКТИРОВАНИЕ: был разбит на 3 секунды! Примечание по перегрузке, если необходимо сравнить значения в типе, основной.Equals () от Класса объекта, не будет достаточно, как это только сделает, память выдерживает сравнение для составных типов. Необходимо будет перегрузить и обеспечить реализацию того, как Вы хотите, чтобы объект был сравнен.