Я довольно новыми для C# наступающем от Java, и мне интересно, если есть простой способ избежать повторения кода с участием примитивных типов, как это:C# Generics, чтобы избежать повторения кода?
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;
}
Я не могу найти «номер» супертип так что я могу сравнить «Элемент» в реализации дженериков (я бы не против ухудшая производительность бокса, хотя я понимаю, что в .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;
}
это единственный способ создать мою собственную реализацию Number и иметь метод compare()? Это звучит как перебор, не так ли?
Есть несколько аналогичных вопросов. Проверьте, помогают ли они вам. Пара примеров: 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-comparees-different-types-of-n – Carlos
На боковой ноте используйте 'bool' вместо' Boolean'. bool - это ярлык. – GenericTypeTea