Интерфейс INumber
INumber<T> из System.Numerics
ограничивает T типами вроде int
и double,
для которых определены +, - и
сравнение. В обобщённом методе можно писать
a + b без дублирования кода для каждого
типа. Статические функции Math и
MathF
работают с конкретными типами напрямую.
Синтаксис
using System.Numerics;
static T Add<T>(T a, T b) where T : INumber<T>
{
return a + b;
}
Пример
Давайте сложим два int через
INumber<T>:
using System;
using System.Numerics;
class Program
{
static T Add<T>(T a, T b) where T : INumber<T>
{
return a + b;
}
static void Main()
{
int res = Add(3, 5);
Console.WriteLine(res);
}
}
Результат выполнения кода:
8
Пример
Давайте вычтем одно целое из другого:
using System;
using System.Numerics;
class Program
{
static T Sub<T>(T a, T b) where T : INumber<T>
{
return a - b;
}
static void Main()
{
int res = Sub(5, 2);
Console.WriteLine(res);
}
}
Результат выполнения кода:
3
Пример
Давайте сравним два числа через CompareTo
у T:
using System;
using System.Numerics;
class Program
{
static int Compare<T>(T a, T b) where T : INumber<T>
{
return a.CompareTo(b);
}
static void Main()
{
Console.WriteLine(Compare(1, 3));
Console.WriteLine(Compare(5, 5));
}
}
Результат выполнения кода:
-1
0
Смотрите также
-
Math,
статические функции над числами -
Int32,
который реализуетINumber<int> -
MidpointRounding,
который задаёт правило округления -
тип
int,
использованный в вызовеAdd