We can use the new INumber<TSelf>
interface in .NET 7 to reference any numeric type, like the following:
using System.Numerics;
INumber<int> myNumber = 72;
INumber<float> mySecondNumber = 93.63f;
However, because of the type constraint in INumber
, we can't have a generic reference that can hold any numeric type. This following code is invalid:
using System.Numerics;
INumber myNumber = 72;
myNumber = 93.63f;
How can I have an array of any numeric objects and call a method that is expecting a INumber<TSelf>
object.
using System.Numerics;
object[] numbers = new object[] { 1, 2.5, 5, 0x1001, 72 };
for (int i = 0; i < numbers.Length - 1; i++)
{
Console.WriteLine("{0} plus {1} equals {2}", numbers[i], numbers[i + 1], AddNumbers(numbers[i], numbers[i + 1]));
}
static T AddNumbers<T>(T left, T right) where T : INumber<T> => left + right;