5

这不起作用

        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

4 回答 4

10

MSDN 文档中Color.operator ==

此方法比较的不仅仅是 Color 结构的 ARGB 值。它还对一些州旗进行了比较。如果您只想比较两个 Color 结构的 ARGB 值,请使用 ToArgb 方法进行比较。

我猜州旗是不同的。

于 2009-04-06T13:10:28.170 回答
1

它们不等于相同,因为 Color.Blue 不等于您的颜色对象,它等于内部存储的内容,即“新颜色(KnownColor.Blue);” 确切地说。

于 2009-04-06T13:15:22.447 回答
0

由于值类型的装箱,我会期望 Assert.AreSame 会这样,但 AreEqual 不应该有这个问题。

您能否添加您使用的语言(我假设是 C#)和测试框架?

结果是什么Assert.AreEqual(true, Color.Blue == fred);

于 2009-04-06T13:05:50.287 回答
0

或者,这也有效,我认为它更直观

    [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);
    }
于 2010-01-01T04:58:38.373 回答