С#. Не могу понять почему не работает ограничение 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. Я не до конца понял что это за ограничение и как мне задать ограничение для моего случая?


Ответы (0 шт):