Общий метод, где INumber и параметр типа T? [дубликат]C#

Место общения программистов C#
Ответить
Anonymous
 Общий метод, где INumber и параметр типа T? [дубликат]

Сообщение Anonymous »

Все числовые типы в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»