- 1
- 2
- 3
- 4
- 5
- 6
int CompareTo (A a1, A a2)
{
if (a1.Year>a2.Year) return 1;
if (a1.Year<a2.Year) return -1;
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−7
int CompareTo (A a1, A a2)
{
if (a1.Year>a2.Year) return 1;
if (a1.Year<a2.Year) return -1;
return 0;
}
реализация интерфейса IComparable, чем не понравилось стандартное норминрование: return a1.Year - a2.Year; так и не понял
guest 28.12.2008 11:11 # 0
[quote=Аффтар]чем не понравилось стандартное норминрование: return a1.Year - a2.Year; так и не понял[/quote]
Не знаю, возможно ли это в С#, но в С++ может быть в качестве A тип большего размера, т.е. допустим int 4 байта, а в качестве A - 8байтный long, тогда разность может не скастится до инта корректно, и результат будет неправильным, а сравнение корректно всегда.
guest 28.12.2008 16:13 # 0
Вероятно вы имели в виду a1, a2
В C# можно передать в этот метод либо экзмепляр самого класса, либо его наследник. В любом случае, среда гарантирует, что код будет работать корректно и для потомков. Сама логика интерфейса подразумевает сравнение объектов одного типа, и не зависит от языка, так что я бы сказал, что передавать разноразмерные параметры в эту функцию - семантически сомнительно.
ЗЫ Среда же не допустит неявного (и явного) преобразования long к int и возникнет ошибка времени компиляции.
guest 28.12.2008 18:13 # 0
Я имел в виду что A::year - это long или uint который не приводится к int без потерь. Да, уже посмотрел, что подобные неявные преобразования в шарпе запрещены - только через явный каст.
В С++ мне приходилось в подобном случае, когда return(a1-a2); было некорректно, но компилилось, заменять вычитание на приведенный код, поэтому возможно автор кода опытный С/С++ разработчик.
guest 30.12.2008 11:43 # 0
int CompareTo(A a1, A a2)
{
return Comparer<int>.Default.Compare(a1.Year, a2.Year); // Для случая, когда Year - int
}
guest 30.12.2008 15:16 # 0
guest 14.01.2009 12:00 # 0
Не говнокод
guest 27.01.2009 19:01 # 0
Вот вырезка из исходников класса Int32.
Код абсолютно нормальный.
При сравнении (a - b) могут быть ошибки в случае, когда a=maxint, b=-maxint.
guest 05.04.2009 11:37 # +1
Если обсуждается сравнение объектов одного типа вне своего класса, то да, это быдлокод, если обсуждается индусское сравнение даты вместо имплементного IComparable<DateTime/int>, то тоже быдлокод. Сдаётся мне тут же толпа быдлокодеров долбится об стену головой: