Сравнить два объекта Color
Это VS2010 и .NET 4.0. Я пытаюсь сравнить два объекта System.Drawing.Color
.
Значение mStartColor.ToArgb()
равно 16777215
.
Значение Color.Transparent.ToArgb()
равно 16777215
.
Значение mStartColor <> Color.Transparent
равно True
.
Как реализуется равенство для объектов Color
?
РЕДАКТИРОВАТЬ
Спасибо всем. Я получил свой ответ, хотя он не имеет особого смысла для меня (см. Мои комментарии к ответам Тима и Дейва ниже). Я отмечу Тим пост как ответ, и он был первым, кто ответил, но ответ Дейва одинаково информативен.
Ответы
Ответ 1
Всегда сначала читайте документацию:
"Для сравнения цветов, основанных исключительно на их значениях ARGB, следует использовать метод ToArgb. Это связано с тем, что члены Equals и Equality определяют эквивалентность, используя не только значение ARGB цветов. Например, Black и FromArgb (0,0, 0) не считаются равными, так как черный является именованным цветом, а FromArgb (0,0,0) не является "
Ответ 2
У структур цвета есть больше данных, содержащихся в них, чем только фактическая информация о цвете, например
Color [Transparent]
R: 255
G: 255
B: 255
A: 0
IsKnownColor: True
IsEmpty: False
IsNamedColor: True
IsSystemColor: False
Name: Transparent
Color.FromArgb(16777215)
Color [A=0, R=255, G=255, B=255]
R: 255
G: 255
B: 255
A: 0
IsKnownColor: False
IsEmpty: False
IsNamedColor: False
IsSystemColor: False
Name: ffffff
Равные сравнения будут использовать все это для определения равенства. вы должны быть diong, что вы уже предложили, и использовать:
Color.Transparent.ToArgb().Equals(mStartColor.ToArgb())
Ответ 3
Вы можете написать метод расширения, который бы сравнивал значение ARGB двух цветовых объектов и возвращал true, если они одинаковы.
Вот Документация MSDN по методам расширения.