我的 Fancy Field Updater 抛出异常。
public static bool UpdateField<T>(ref T target, T value)
{
bool updated;
if (0 != Comparer<T>.Default.Compare(target, value))
{
target = value;
updated = true;
}
else
{
updated = false;
}
return updated;
}
我将此更新程序用于“值类型”、系统“引用类型”和我自己的“引用类型”。我的类型没有实现 IComparable,而且我也不打算这样做。在这些情况下,仅比较引用通常是可以接受的。
重点是我希望能够用它来做任何事。是否有不同的实现允许我这样做,或者我是否必须捕获异常并尝试以不同的方式处理这些情况?
最佳答案
看起来您并不是真的想用“大于或小于”来比较值 - 而是为了相等。所以你应该使用EqualityComparer.Default
:
public static bool UpdateField<T>(ref T target, T value)
{
bool updated = !EqualityComparer<T>.Default.Equals(target, value);
if (updated)
{
target = value;
}
return updated;
}
默认的相等比较器会执行您对类所需的操作 - 如果类型未实现 IEquatable<T>
,它会比较引用的标识。或覆盖object.Equals
.
关于c# - 通用比较抛出 "At least one object must implement IComparable.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38251634/