我正在嘗試創建一個通用的“屬性”類,它同時維護它的當前值和最后一個值。
public class GenericTrackingProperty<T> where T : IEquatable<T>
{
private T _oldValue;
private T _currentValue;
public T Value
{
get { return _currentValue; }
set
{
if (value != _currentValue)
{
_oldValue = _currentValue;
_currentValue = value;
}
}
}
}
盡管在類定義中使用where來確保泛型型別是相等的,但編譯器抱怨比較“if (value != _currentValue”給出錯誤“Operator '!='不能應用于型別'T'的運算元和'T'”。我做錯了什么?
uj5u.com熱心網友回復:
IEquatable<T>不包含運算子,但包含Equals方法。
使用它代替相等運算子:
if (!value.Equals(_currentValue))
或者,空感知:
if (value == null ? _currentValue == null : !value.Equals(_currentValue))
uj5u.com熱心網友回復:
讓 .NET為您比較兩個值(同時檢查null等):
if (!EqualityComparer<T>.Default.Equals(value, _currentValue)) {
...
}
您可以使用,value.Equals但在這種情況下,您必須檢查null:
if (value == null && _currentValue != null || !value.Equals(_currentValue)) {
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/375644.html
