Это просто , как работают цвета в .NET :
Эта структура сравнивает только другие структуры Color.Чтобы сравнивать цвета, основываясь исключительно на их значениях ARGB, вы должны сделать следующее:
if (color1.ToArgb () == color2.ToArgb ()) ...
Thisпотому что операторы .Equals и == определяют эквивалентность, используя не только значение ARGB цветов .Например, Color.Black и Color.FromArgb (0,0,0) не считаются равными, поскольку Color.Black является именованным цветом, а Color.FromArgb (0,0,0) - нет.
Редактировать : дополнительные ответы.
Мой вопрос, почему на земле MSFT заставил бы меня сравнивать белый с безобразным образом?!?!?
Если вы сравниваете цвета таким образом, что хотите узнать, совпадают ли они по цвету со значениями компонентов ARGB, то вы должны сравнивать их в "уродливом"" путь.Если вы сравниваете цвета так же, как большинство программистов .NET используют структуру Color
, то вам нужно знать, является ли какой-то цвет White
или Red
или Chartreuse
, и "красивым"способ (с использованием Equals и ==) является простым, легким в использовании и очень читабельным.
Кроме того, «уродливый» способ - это не метод, который вы опубликовали, а вот такой:
if (color1.ToArgb() == color2.ToArgb()) ...
что на самом деле не так страшно.
Кроме того, еще одна вещь, которую я не понимаю, почему 1-аргументный конструктор Color принимает целое число, он должен иметь возможность взять uint (0xffffffff)
Я бы сказал, что , а не должно быть в состоянии взять uint
, из-за неизбежной путаницы и цветовых ошибок, которые могут вызвать.Для этого легко написать метод.