Использование ToArgb() с последующим FromArgb() не приводит к исходному цвету

Это не работает

        int blueInt = Color.Blue.ToArgb();
        Color fred = Color.FromArgb(blueInt);
        Assert.AreEqual(Color.Blue,fred);

Какие-либо предложения?

[Редактировать]

Я использую NUnit и вывод

не удалось:

Ожидаемый: цвет [синий]

Но было: Цвет [A = 255, R = 0, G = 0, B = 255]

[Редактировать]

Это работает!

        int blueInt = Color.Blue.ToArgb();
        Color fred = Color.FromArgb(blueInt);
        Assert.AreEqual(Color.Blue.ToArgb(),fred.ToArgb());

4 ответа

Решение

Из документации MSDN поColor.operator ==:

Этот метод сравнивает больше, чем значения ARGB структур Color. Это также делает сравнение некоторых государственных флагов. Если вы хотите сравнить только значения ARGB двух структур Color, сравните их с помощью метода ToArgb.

Я предполагаю, что государственные флаги разные.

Они не будут равны, так как Color.Blue не равен вашему цветному объекту, он равен чему-то, что хранится внутри, "new Color(KnownColor.Blue);" если быть точным.

Я ожидал бы этого с Assert.AreSame из-за бокса с типами значений, но у AreEqual не должно быть этой проблемы.

Не могли бы вы добавить, какой язык (я полагаю, C#) вы используете и какие рамки тестирования?

Что значит Assert.AreEqual(true, Color.Blue == fred); результат в?

Кроме того, это также работает, и я думаю, что это более интуитивно

    [Test]
    public void ColorTransform()
    {
        var argbInt = Color.LightCyan.ToArgb();
        Color backColor = Color.FromArgb(argbInt);
        Assert.AreEqual(Color.LightCyan.A, backColor.A);
        Assert.AreEqual(Color.LightCyan.B, backColor.B);
        Assert.AreEqual(Color.LightCyan.G, backColor.G);
        Assert.AreEqual(Color.LightCyan.R, backColor.R);
    }
Другие вопросы по тегам