-4

C# コードに問題があります... VS2010 ではコンパイルできません :(

これが私がやろうとしていることです:

bool listNotNeeded;

if(listNotNeeded && !myList.Any()) //I've tried other ways of verbalizing
    {
    myList.Clear();
    }

コンパイルを拒否します...エラーが発生します:InvalidOperationException unhandled。シーケンスに要素が含まれていません。リストがすでに空で、リストに入力するコードの他の部分がある場合は、ここに到達することはありません。リスト人口コードは正常に動作し、すでにコンパイルおよびテストされています...この部分だけが何らかの理由で壊れました。

編集:不要な 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 に答える