Сравнивая универсальный шаблон с null, который может быть значением или ссылочным типом?

public void DoFoo<T>(T foo) where T : ISomeInterface<T>
{
    //possible compare of value type with 'null'.
    if (foo == null) throw new ArgumentNullException("foo");
}

Я намеренно проверяю только на null, потому что не хочу ограничивать ValueType равным его по умолчанию (T) . Мой код компилируется и отлично работает таким образом (ReSharper жалуется, но не CodeAnalysis). Хотя мне интересно:

  • Есть ли более стандартный способ справиться с этой ситуацией?
  • Есть ли шанс, что из-за этого возникнут проблемы?
  • Что на самом деле происходит под капотом, когда я сделать вызов и передать тип значения?
41
задан michael 11 January 2012 в 18:16
поделиться