Я хочу, чтобы один общий класс мог принимать либо ссылочные, либо типы значений, и выполнять только действие, основанное на тесте равенства. рассмотрим следующее:
public class Property<TProp>
  where TProp : struct, IEquatable<TProp>
{
   public TProp Value;
   public void SetValue(ObservableObject owner, TProp value)
   {
      if (!Value.Equals(value))     // cannot use != on struct constrained TProp
      {
          // ... set the property
      }
   }
}
public class ByRefProperty<TProp>
  where TProp : class   // Dont want to require IEquatable<> on reference type TProp
{
   public TProp Value;
   public void SetValue(ObservableObject owner, TProp value)
   {
      if (Value != value)           
      {
          // ... set the property
      }
   }
}
Мне нужно использовать общие ограничения и два класса, чтобы иметь возможность проверить равенство типа значения против равенства ссылочного типа. Есть ли способ обойти это так, что я получаю только один класс?
Я не особо хочу решения, которое включает типы значений бокса, используя отражение или генерация IL во время выполнения. Есть ли простое решение, которое я пропустил здесь?
