capypad
0 Tage Serie
csharp / expert
Snippet

Generische Mathematik über statische abstrakte Member

Statische abstrakte Member in Interfaces erlauben es in C#, Operatoren und statische Eigenschaften innerhalb eines Interfaces zu definieren. Dies ist die Grundlage für 'Generic Math' und ermöglicht es Entwicklern, generische Algorithmen zu schreiben, die über alle numerischen Typen hinweg funktionieren, indem Typparameter auf das INumber<T>-Interface beschränkt werden.

snippet.csharp
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Numerics;
 
public static class MathUtils {
public static T SumAll<T>(IEnumerable<T> values) where T : INumber<T> {
T result = T.Zero;
foreach (var value in values) {
result += value;
}
return result;
}
}
 
// Usage
double dSum = MathUtils.SumAll(new[] { 1.5, 2.5 });
int iSum = MathUtils.SumAll(new[] { 10, 20 });
Erklärung
1
where T : INumber<T>
Beschränkt T auf Typen, die das Standard-Numerik-Interface implementieren, inklusive Operatoren.
2
T result = T.Zero;
Greift auf die statische Zero-Eigenschaft zu, die im Interface für den spezifischen Typ T definiert ist.
3
result += value;
Verwendet den statischen '+'-Operator, der im Interface definiert ist, um Additionen auf generischen Typen durchzuführen.