Почему Color.FromArgb(255, 255, 255, 255)!= Color.White?

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

Спасибо.

Ответы

Ответ 1

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

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

Ответ 2

Чтобы добавить к Nick (правильный) ответ: если вы действительно этого хотели, вы могли бы написать свою собственную реализацию 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();
    }
}