Generic Math in C# with .NET 6
How to perform math on generic types in C# with .NET 6
Generic types are great, but it has traditionally been difficult to do math with them. Consider the simple task where you want to accept a generic array and return its sum. With .NET 6 (and features currently still in preview), this got much easier!
public static T Sum<T>(T[] values) where T : INumber<T>
{
T sum = T.Zero;
for (int i = 0; i < values.Length; i++)
sum += values[i];
return sum;
}
To use this feature today you must:
- Install the System.Runtime.Experimental NuGet package
- Add these lines to the
PropertyGroup
in your csproj file:
<langversion>preview</langversion>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
Note that the generic math function above is equivalent in speed to one that accepts and returns double[]
, while a method which accepts a generic but calls Convert.ToDouble()
every time is about 3x slower than both options:
// this code works on older versions of .NET but is about 3x slower
public static double SumGenericToDouble<T>(T[] values)
{
double sum = 0;
for (int i = 0; i < values.Length; i++)
sum += Convert.ToDouble(values[i]);
return sum;
}