为什么不执行比较WPF ImageSources的if语句?

时间:2019-03-29 16:00:45

标签: c# wpf if-statement wpf-controls

我正在检查图像是否与所需图像源匹配,然后实例化“ Queen”类。为此,我遍历对象列表“节点”,该对象列表具有方法getType(),该方法返回图像。我正在检查Colony.getNodes()列表中的每个图像。

我已经100%确信至少有一张图片与“ H:\ Year 13 \ Computing \ Ant Simulation \ QueenRoom.png”匹配,就像我使用断点检查过的一样。那么为什么不输入我的if语句呢?

我还尝试过将Colony.getNodes()[i] .getType()。Source与BitmapImage的新实例进行比较,在for循环之前创建BitmapImage变量,但这无济于事。

        for (int i = 0; i < colony.getNodes().Count; i++)
        {
            if (colony.getNodes()[i].getType().Source == new BitmapImage(new Uri(@"H:\Year 13\Computing\Ant Simulation\LarvaRoom.png")))
            {
                nurseryFood.Add(colony.getNodes()[i].getLocation(), 0);
            }
            if (colony.getNodes()[i].getType().Source == new BitmapImage(new Uri(@"H:\Year 13\Computing\Ant Simulation\QueenRoom.png")))
            {
                queen = new Queen(colony.getNodes()[i].getLocation(), colony.getNodes()[i].getType().Margin);
            }
        }

我还有另一个if语句,它具有完全相同的问题。使用断点进行测试时,永远不要输入if语句。我该如何工作?

1 个答案:

答案 0 :(得分:0)

正如@RenéVogt所说,您的if从未输入的原因是因为Source == new BitmapImage()正在进行参考比较。由于您在两个不同的实例上工作,因此它将始终返回false。

如果您希望ifs工作,则可以对照新的BitmapImages(假设您的节点也是BitmapImage)检查Node.UriSource。

例如:

if (new Uri(Convert.ToString(colony.getNodes()[i].getType().Source)) == new Uri(@"H:\Year 13\Computing\Ant Simulation\LarvaRoom.png"))