Я ищу пример использования примерно так:
Foo<string> stringFoo = new Foo<string>("The answer is");
Foo<int> intFoo = new Foo<int>(42);
// The Value of intFoo & stringFoo are strongly typed
stringFoo.Nullify();
intFoo.Nullify();
if (stringFoo == null && intFoo == null)
MessageBox.Show("Both are null);
Учитывая этот класс Foo, я могу автоматически обернуть T в значение NULL:
public class Foo1<T>
where T : struct
{
private T? _value;
public Foo(T? initValue)
{
_value = initValue;
}
public T? Value { get { return _value; } }
public void Nullify { _value = null; }
}
Это работает для примитивов, но не для String или других классов.
Следующий вкус работает для строк, но не примитивов:
public class Foo2<T>
{
private T _value;
public Foo(T initValue)
{
_value = initValue;
}
public T Value { get { return _value; } }
public void Nullify { _value = default(T); }
}
Я мог бы использовать Nullable<int>
для Foo2, и код будет работать следующим образом:
Foo2<int?> intFoo = new Foo<int?>(42);
Но это ошибка, потому что она не работает для Foo2. Если бы я мог ограничить T типами, поддерживающими nullability, то это было бы хорошо.
Итак, после всего этого, есть ли способ ограничить T типом NULL?
Некоторые дополнительные примечания:.NET 4.0, VS2010. И я нашел здесь один подобный вопрос, но без успешного ответа.