Ich bin ziemlich neu in C# aus Java, und ich frage mich, ob es ein einfacher Weg, Code Wiederholung die primitive Typen wie dies zu vermeiden:C# Generika zur Vermeidung von Code-Wiederholungen?
private Boolean AtLeastOneBufferItemIsNonZero(int[] Buffer)
{
Boolean result = false;
foreach (int Item in Buffer)
{
result = !(Item == (int)0);
if (result) break;
}
return result;
}
private Boolean AtLeastOneBufferItemIsNonZero(float[] Buffer)
{
Boolean result = false;
foreach (float Item in Buffer)
{
result = !(Item == (float)0);
if (result) break;
}
return result;
}
ich keinen „Nummer“ Supertyp so finden dass ich vergleichen kann „Item“ in einer Generika-Implementierung (ich würde nicht die Leistungseinbuße des Boxens dagegen, obwohl ich verstehe, dass so etwas gibt es nicht in .NET?):
//SOMETHING LIKE THIS?
private Boolean AtLeastOneBufferItemIsNonZero<T>(T[] Buffer) where T : NUMBERTYPE
{
Boolean result = false;
foreach (T Item in Buffer)
{
result = !(Item.Equals(0)); //Nope....
if (result) break;
}
return result;
}
ist der einzige Weg zu Erstelle meine eigene Zahlenimplementierung und eine compare() Methode? Das klingt nach Overkill, oder?
Es gibt einige ähnliche Fragen. Überprüfen Sie, ob sie Ihnen helfen. Einige Beispiele: http://stackoverflow.com/questions/3329576/generic-constraint-to-match-numeric-types http://stackoverflow.com/questions/802024/struggling-to-come-up-with-a -generic-c-method-das-vergleicht-verschiedene-type-of-n – Carlos
Nebenbei bemerkt, verwenden Sie 'bool' anstelle von' Boolean'. Bool ist eine Abkürzung. – GenericTypeTea