-4

我的 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;
    }
4

2 回答 2

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>());

您是说:“如果剩下的物品少于 1 件smokeList,请获取第一项并将其删除”

于 2012-07-03T17:24:32.147 回答
0
bool listNotNeeded = false; // set a value

if(listNotNeeded && !myList.Any()) //I've tried other ways of verbalizing
{
    myList.Clear();
}
于 2012-07-03T17:19:06.817 回答