Все числовые типы в C# (int, float, byte, long, double и т. д.) реализуют System.Numerics.INumber. Это отлично подходит для создания универсального метода, такого как
Код: Выделить всё
void Example(T value) where T: INumber
{
// do something
}
Однако я хочу, чтобы мой универсальный метод также обрабатывал варианты, допускающие значение NULL, поэтому вместо этого я могу реализовать следующее (обратите внимание, что тип параметра — T?, а не T:
Код: Выделить всё
void Example(T? value) where T: INumber
{
if(value is T nonNullValue)
// do something
else
// do something else
}
Однако я не могу вызвать этот метод со значением, если оно равно null:
Код: Выделить всё
Example(123); // OK
int? nullableInt1 = null;
Example(nullableInt1); // CS0313
int? nullableInt2 = 123;
Example(nullableInt2); // CS0313
Я не понимаю, почему это невозможно, и не понимаю, как добиться того, что мне нужно. Есть идеи? Спасибо
Подробнее здесь:
https://stackoverflow.com/questions/797 ... -of-type-t