无法隐式转换类型';系统集合.通用的列表<;BallSeparation.球>';到';boo
本文关键字:列表 lt BallSeparation boo gt 集合 转换 类型 系统 | 更新日期: 2023-09-27 18:14:41
我在上有这个错误
for (Ball ball; ballList)
错误消息为
"Cannot impliciltly convert type 'System.Collections.Generic.List<BallSeparation.Ball>' to 'bool'"
我可以知道该怎么解决吗?
public partial class StartGame : Form
{
public List<Ball> ballList { get; private set; }
/**int bBA1; //The x axis from the upper left corner
int bBA2; //The y axis from the upper left corner
int spdBBA1; //The change of x
int spdBBA2; //The change of y
**/
public StartGame()
{
this.ballList = new List<Ball>();
InitializeComponent();
}
private void StartGame_Load(object sender, EventArgs e)
{
ballList.add(new Ball(5, 10, 1, 1));
/**
//Loads the ball on the screen at bottom of the window
bBA1 = this.ClientSize.Width / 5; //The x axis the ball is loaded at
bBA2 = this.ClientSize.Height - 10; //The y axis the ball is loaded at
spdBBA1 = 1; //The speed of the ball of y
spdBBA2 = 1; //The speed of the ball of x
**/
}
private void StartGame_Paint_1(object sender, PaintEventArgs e)
{
//This foreach loop will run through all the balls in ballList
for (Ball ball; ballList)
{
e.Graphics.FillEllipse(Brushes.Blue, ball.positionX, ball.positionY, 10, 10);
}
/**
//This is the inner paint color of the circle that is 10 by 10
e.Graphics.FillEllipse(Brushes.Blue, bBA1, bBA2, 10, 10);
//This is the outline paint color of the circle that is 10 by 10
e.Graphics.DrawEllipse(Pens.Blue, bBA1, bBA2, 10, 10);
**/
}
private void timer1_Tick(object sender, EventArgs e)
{
/**
bBA2 = bBA2 + spdBBA2;
bBA1 = bBA1 + spdBBA1;
if (bBA2 < 0)
{
spdBBA2 = -spdBBA2; //If y is less than 0 then it changes direction
}
else if (bBA1 < -5)
{
spdBBA1 = -spdBBA1;
}
else if (bBA2 + 10 > this.ClientSize.Height)
{
spdBBA2 = -spdBBA2; //If y + 10, the radius of the circle is greater than the form width then we change direction
}
else if (bBA1 + 10 > this.ClientSize.Width)
{
spdBBA1 = -spdBBA1;
}
this.Invalidate();
**/
}
行for (Ball ball; ballList)
实际上不是foreach循环。这是一个for循环,以ballList为条件(因此被视为bool(。你可能想要的是
foreach (Ball ball in ballList)
您的问题是以下行:
for (Ball ball; ballList)
for
循环的语法为:
for (some assignment; some condition; some statement(s))
要像您想要的那样浏览ballList
,请使用foreach
循环:
foreach (Ball ball in ballList)
{
// ...
}
C#不是Java。这有点像Java:
for (Ball ball; ballList)
正确的C#:
foreach ( Ball ball in ballList)
我注意到你正在写一个游戏并使用计时器。你可能想看看这里,了解为什么传统计时器通常不用于游戏。
编辑以供后续评论:
您的表格是公开的。它拥有一个名为List of Balls的公共财产。现在你的舞会课很可能不是公开的。这是不一致的。表单不应公开未知类型。要么将Ball公开,要么将公开Ball类型的方法和属性设置为私有。
更改此项:
for (Ball ball; ballList)
到此:
foreach (Ball ball in ballList)
for (Ball ball; ballList)
应该是
foreach(Ball ball in ballList)
for
语句的第二部分是测试条件(保持循环运行(;因此,您试图将ballList
作为bool
表达式传递。