我的if else声明可能有什么问题?

时间:2015-04-23 19:25:03

标签: c# if-statement

 Card img = new Card();
   Deck im = new Deck();

    private void button1_Click(object sender, EventArgs e)
    {
        Bitmap bc;// = new Bitmap(100, 142);

        Brush b = new SolidBrush(Color.Green);
        Card[] card = im.Shuffling();

        bc = img.DrawCard(card[1]);
  

尽管Color1属性是==到b,编译器仍会跳到else语句,即使我使用not(!=)函数,所有组件仍然都在if语句中。我哪里可能出错?

        if (card[1].Color1== b)
        {

            pic = new PictureBox();
            piclist = new List<PictureBox>();


            numberOfCards++;

            piclist.Add(pic);

            this.Controls.Add(pic);
            pic.Size = pictureBox1.Size;
            pic.Left = pictureBox1.Left + ((pictureBox1.Width) * numberOfCards);
            pic.Top = pictureBox1.Top;
            pic.Visible = true;
            pic.SizeMode = PictureBoxSizeMode.StretchImage;

            pic.BringToFront();

            pic.Image = bc;



        }
        else 
            MessageBox.Show("unequall");




    }

2 个答案:

答案 0 :(得分:5)

(因为我没有代表评论) 捎带AaronLS的回复,这对我来说似乎是正确答案: SolidBrush对象将具有您在构造函数调用中设置的属性SolidBrush.Color

Brush b = new SolidBrush(Color.Green);

因此,当您检查画笔颜色和卡片颜色的相等性时,您需要返回画笔的颜色以进行比较:

if (card[1].Color1== b.Color)

尽管如果card [x] .Color1属于差异参考类型,情况可能并非如此。

答案 1 :(得分:4)

我的猜测是Brush b = new SolidBrush(Color.Green);生成一个新对象,而card[1].Color1是对不同SolidBrush实例的不同引用。比较不检查它们是否是相同的颜色,但检查它们是否是相同的参考。如果您搜索SO以及#34;比较参考类型c#&#34;你会发现很多问题以不同的方式解决这个问题。

只有单步执行代码才能确定这是否是您所看到的。我不知道card[1].Color1设置在哪里,所以任何人都可以猜测,但几乎可以肯定它是参考比较问题。正如sukotto指出的那样,在这种情况下,您可能真的想要比较Color枚举(这避免了参考比较的问题,而是比较离散值)。