Почему Color.FromArgb (255, 255, 255, 255)! = Color.White? - PullRequest
14 голосов
/ 16 ноября 2010

Почему Color.FromArgb (255, 255, 255, 255) не равно Color.White? Есть ли какой-нибудь встроенный способ сравнения только значений A, R, G, B, а не имен цветов?

Спасибо.

Ответы [ 2 ]

17 голосов
/ 16 ноября 2010

См. http://msdn.microsoft.com/en-us/library/e03x8ct2(VS.85).aspx

Эта структура только делает сравнения с другими цветными структурами. к сравнивать цвета, основываясь исключительно на их Значения ARGB, вы должны использовать ToArgb метод. Это потому, что Равные и члены op_Equality определяют эквивалентность, используя не только ARGB значение цветов. Например, Black и FromArgb (0,0,0) не являются считается равным, так как черные названный цвет и FromArgb (0,0,0) нет.

5 голосов
/ 16 ноября 2010

Чтобы добавить к (правильному) ответу Ника: если вы действительно хотели, вы можете написать свою собственную реализацию IEqualityComparer<Color> и использовать ее, например, в любых алгоритмах, которые вы пишете, которые имеют дело с цветами,где вам нужна гибкость, когда дело доходит до определения цветового равенства.

Вы знаете, что-то вроде:

public class ColorComparer : IEqualityComparer<Color>
{
    public bool Equals(Color x, Color y)
    {
        return x.ToArgb() == y.ToArgb();
    }

    public int GetHashCode(Color color)
    {
        return color.ToArgb();
    }
}
...