Оператор равенства System.Drawing.Color не обрабатывает 0xffffffff как Color.White

Почему это оценивается как false ?

Color.FromArgb(255, 255, 255, 255) == Color.White

Update Это сделано намеренно.

Вот копия декомпилированной функции Equals в структуре Color :

public override bool Equals(object obj)
{
    //probably failure to convert from C++ source,
    //the following line should be invalid in C#, nevermind
    if (obj is Color)
    {
        Color color = (Color) obj;
        if (((this.value == color.value) &&
            (this.state == color.state)) &&
             (this.knownColor == color.knownColor))
        {
            return ((this.name == color.name) || 
                   (((this.name != null) && (color.name != null)) && 
                   this.name.Equals(this.name)));
        }
    }
    return false;
}

Мой вопрос: с какой стати MSFT заставляет меня сравнивать белый цвет безобразным образом?!? !?

static bool AreEqual(Color a, Color b)
{
  if (!a.Equals(b))
  {
    return
      a.A == b.A &&
      a.R == b.R &&
      a.G == b.G &&
      a.B == b.B;    
  }
  return true;
}

Еще я не понимаю, почему перегрузка с 1 аргументом функции FromArgb в Color принимает int , она должна иметь возможность использовать uint ( 0xffffffff )

5
задан Shimmy 16 November 2011 в 04:20
поделиться