我的C#代码出现问题...... VS2010不会让我编译:(
这是我正在尝试做的事情:
bool listNotNeeded;
if(listNotNeeded && !myList.Any()) //I've tried other ways of verbalizing
{
myList.Clear();
}
它拒绝编译...给出错误:InvalidOperationException未处理。序列不包含任何元素。如果列表已经为空,它永远不会到达此处,并且代码的其他部分会填充它。列表人口代码工作正常,已经编译和测试......只是因为某种原因这件事打破了它。
编辑: 我希望能够在不使用不必要的try-catch的情况下进行编译,或者尽可能使用初始值初始化列表。
private void UpdateRocket()
{
if (rocketFlying)
{
Vector2 gravity = new Vector2(0, 1);
rocketDirection += gravity / 9.8f;
rocketAngle = (float)Math.Atan2(rocketDirection.X, -rocketDirection.Y);
rocketPosition += rocketDirection;
Vector2 smokePos = rocketPosition;
smokePos.X += randomizer.Next(10) - 5;
smokePos.Y += randomizer.Next(10) - 5;
smokeList.Add(smokePos);
if (smokeList.Count > 20)
smokeList.Remove(smokeList.First<Vector2>());
}
if (!rocketFlying)
if (smokeList.Count > 0)
smokeList.Remove(smokeList.First<Vector2>());
if (rocketPosition.X < 0 || rocketPosition.X > screenWidth || rocketPosition.Y > screenHeight)
rocketFlying = false;
}
答案 0 :(得分:2)
问题出在代码中的其他地方,您尚未与我们分享。
以下是几个例子:
var myList = new List<int>();
myList.Any(); // Does not throw that exception
myList.Clear(); // Does not throw that exception
myList.First(); // Throws:
// InvalidOperationException unhandled.
// Sequence contains no elements.
myList.FirstOrDefault(); // Does not throw that exception
这个例子运行良好:
bool listNotNeeded = false;
var myList = new List<int>() { 1, 2, 3, 4 };
if (listNotNeeded && !myList.Any())
{
myList.Clear();
}
代码的另一部分依次删除 物品使用First。那会搞砸吗?
是,这会让事情变得混乱。如果列表为空,则调用First
将抛出该异常。
修改强>
我认为这是你的问题:
if (smokeList.Count < 1)
smokeList.Remove(smokeList.First<Vector2>());
您说:“如果smokeList
中剩余的项目少于1件,请获取第一件商品并将其删除”
答案 1 :(得分:0)
bool listNotNeeded = false; // set a value
if(listNotNeeded && !myList.Any()) //I've tried other ways of verbalizing
{
myList.Clear();
}