Я не уверен, если вы ограничиваете его в классе, потому что вы хотите или потому что вы чувствуете, что должны. Если это последнее, вот способ выполнить проверку значений по умолчанию для сложных и простых типов:
public static bool Valid<T> (this T obj)
{
return !EqualityComparer<T>.Default.Equals(obj, default(T));
}
Если ваш выбор ограничить его только для класса был преднамеренным или для бизнес-случая, не стесняйтесь игнорировать это предложение. Еще одна вещь, которую это может не учитывать, - это упаковка простых типов (хотя в эти дни я обычно использую простые типы, допускающие значение nullable, для которых этот код работает).