2

これを説明する方法についてはよくわかりませんが、私の言いたいことを理解していただければ幸いです。

現在、データベースからすべてのユーザー名を引き出してリストに入れようとしていますが、それが機能します。その後、リストに入れたすべての名前を引き出して画面に表示しようとしていますが、私はこれを機能させることができません。

foreach を試してみましたが、これはリストに姓を表示するだけです。

 foreach (var text in allUsers)
                        {
                            message = text.Bruger.ToString();
                        }

これは私が望んでいたものではありません。それぞれの名前を次々に表示したかったので、代わりにこれを試しました:

foreach (var text in allUsers)
                        {
                            message += text.Bruger.ToString() + '\n';
                        }

しかし、これは同じものを何度も表示し続け、リストには4つの名前しかありませんが、各名前をそれぞれ4回以上表示します(そして続けます)。

次に、「For」ループが2回実行されたときにboolをfalseに設定してループを停止するように、falseに設定されたboolを作成しようとしました。ただし、これはループを停止しますが、すべての名前をそれぞれ少なくとも 5 回表示した後に停止します (名前が画面からなくなるため、各名前を 5 回しか数えられません)。

そのコードは次のようになります。

bool isDoneAdding = false;

                if (isDoneAdding == false)
                {
                    for (int i = 0; i < 2; i++)
                    {
                        foreach (var text in allUsers)
                        {
                            message += text.Bruger.ToString() + '\n';
                        }
                        if (i == 2)
                        {
                            isDoneAdding = true;
                        }
                    }
                }

これに対する答えは非常に簡単かもしれませんが、私はまだ初心者であり、一生これを理解することはできません.

前もって感謝します。

編集

これは、すべてのユーザーをリストに追加する場所です。

        List<User> allUsers = new List<User>();

 MathAndYouDBEntities db = new MathAndYouDBEntities();


            foreach (User user in db.Users)
            {
                allUsers.Add(user);

            }
4

1 に答える 1

2

ご質問の文面から、allUsers の内容は正しく (つまり 4 項目)、foreach ループが何度も実行されていることがわかりました。

isDoneAdding = true;さらに、 for ループが i = 0 および i = 1 に対して実行され、i が値 2 になる前に終了するため、ステートメントに入ることは決してないため、ブール値を使用した試行は機能しません。そのステートメントがたとえば、条件を i == 1 に設定すると、foreach は 1 回だけでなく 2 回実行されます。

bool を使用するには、次のようにする必要があります。

bool isDoneAdding = false;

if (!isDoneAdding)
{
    foreach (var text in allUsers)
    {
         message += text.Bruger.ToString() + '\n';
    }
}
else
{
    isDoneAdding = true;
}

でも foreach を 4 回実行すると言うなら、これはうまくいかないと思います。問題のコンテキストはわかりませんが、イベントに応答してコードが実行され、このイベントが複数回発生するとします。次に、おそらく for ループを含むメソッドの外側で定義されたメッセージ変数 (おそらくインスタンス変数?) があり、一度だけ初期化されます。この場合、メッセージが定義されているのと同じ場所で isDoneAdding を定義する必要があります。

于 2012-06-04T04:57:52.247 に答える