# 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;
}
```