Если вам нужно другое поведение, когда вы имеете дело с типом значения, то вам, очевидно, понадобится выполнить какой-то тест. Вам не нужна явная проверка для в штучной упаковке типов значений, поскольку все типы значений будут упакованы в ** из-за того, что параметр введен как object
.
Этот код должен соответствовать указанным вами критериям: если value
является типом значения (в штучной упаковке), тогда вызовите полиморфный метод Equals
, в противном случае используйте ==
для проверки на равенство ссылок.
public void SetValue(TEnum property, object value)
{
bool equal = ((value != null) && value.GetType().IsValueType)
? value.Equals(_properties[property])
: (value == _properties[property]);
if (!equal)
{
// Only come here when the new value is different.
}
}
(** И, да, я знаю, что Nullable<T>
является типом значения со своими собственными специальными правилами, касающимися упаковки и распаковки, но здесь это в значительной степени не имеет значения.)