Je suis assez nouveau pour C# en provenance de Java, et je me demande s'il y a un moyen simple d'éviter la répétition de code impliquant des types primitifs comme celui-ci:C# Génériques pour éviter la répétition du code?
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;
}
Je ne peux pas trouver un super-type « numéro » de sorte que je peux comparer « Item » dans la mise en œuvre des génériques (je ne me dérangerait pas la peine de la performance de la boxe, même si je comprends que dans .NET il n'y a pas une telle chose?):
//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;
}
est le seul moyen de créer ma propre implémentation de Number et avoir une méthode compare()? Cela ressemble à une exagération, n'est-ce pas?
Il existe des questions similaires. Vérifie s'ils t'aident. Quelques exemples: 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-that-compare-different-types-de-n – Carlos
Sur une note de côté, utilisez 'bool' au lieu de' Boolean'. bool est un raccourci. – GenericTypeTea