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");
}
答案 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枚举(这避免了参考比较的问题,而是比较离散值)。