c#中条件清除列表

时间:2012-07-03 17:14:01

标签: c# visual-studio-2010

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

2 个答案:

答案 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();
}