С#. Не могу понять почему не работает ограничение where T : struct при работе с ValueType
[Fact]
public void Test()
{
int data = 10;
Convert(data);
DateTime data2 = DateTime.Now;
Convert(data2);
Lang l = Lang.Eng; //Enum
Convert(l);
//???
Convert(null);
}
public string Convert(ValueType data)
{
Foo(data);
}
public static string Foo<T>(T val) where T : struct //notnull
{
//Do something..
}
Метод Foo должен принимать в себя ValueType, ну как я это понимаю (все числовые типы, DateTime, bool, struct).
Ограничение на generic функцию where T : struct
Я думал можно передать любой ValueType в такую функцию, но получил ошибку
Ошибка компиляции: The type 'ValueType' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'Foo(T)
также я смог передать null под ValueType. Я думал что для таких случаев нужно специально задавать Nullable значение.
Я так понимаю это особенность C#8 с non-nullable типами?
В документации есть ограничение notnull.
Я не до конца понял что это за ограничение и как мне задать ограничение для моего случая?