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
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;}}// Usagedouble 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.