3

テキストボックスが1に等しいかどうかを確認するとき、リストに特定の値がすでに含まれているかどうかを確認したい. これを実行すると、常にelseコードに移動します。私は何を間違っていますか?

List<int> list = new List<int>();

if (Convert.ToInt32(DobbelWaarde.Text) == 1)
{
    if (list.Contains(1))
    {
        Console.WriteLine("1 is allready been chosen");
    }
    else
    {
        list.Add(1);
        Console.WriteLine();
        foreach (int li in list)
        {
            Console.WriteLine(li);
            Console.WriteLine("We add 1");
        }
    }
}
4

6 に答える 6

11

最初の行は空のリストを初期化します:

List<int> list = new List<int>();

リストは空なので、チェックする値に関係なく、Contains()はfalseを返します。

リストを初期化するには、次を使用できます。

List<int> list = new List<int> { 1 };

詳細はこちら: オブジェクトとコレクションのイニシャライザー(C#プログラミングガイド)

于 2012-11-05T09:36:17.533 に答える
4

これを実行すると、常にelseコードに移動します。

リストのどこにも整数を追加していません。空のリストから始めて、それが含まれ1ているかどうかを確認します。これが、else 部分に移動する理由です。

次のようにリストを初期化できます。

List<int> list = new List<int>() {1};
于 2012-11-05T09:35:02.957 に答える
2

私はあなたのコードを取得しません!

最初のurリストには要素がありません

あなたのコード、それはこのようになるかもしれません:

 List<int> list = new List<int>();
    list.Add(1);
    list.Add(2);
    list.Add(3);
    list.Add(4);

 int number = Convert.ToInt32(DobbelWaarde.Text);

        if ( number == 1)
        {
            if (list.Contains(1))
            {
                Console.WriteLine(number + " is allready been chosen");
            }
            else
            {
                list.Add(number );
                Console.WriteLine();
                foreach (int li in list)
                {
                    Console.WriteLine(li);
                    Console.WriteLine("We add " + number);
                }
            }
        }
于 2012-11-05T09:36:55.193 に答える
1

リストにその番号が含まれているかどうかを確認する前に、常にリストを初期化します。これでリストがクリアされます。したがって、たとえば初期化をクラスのコンストラクターに移動する必要があります。

class MyClass
{
    List<int> list;
    public MyClass()
    {
        list  = new List<int>();
    }

    private void Validate()
    {
        if (Convert.ToInt32(DobbelWaarde.Text) == 1)
        {
            if (list.Contains(1))
            {
                Console.WriteLine("1 is allready been chosen");
            }
            else
            {
                list.Add(1);
                // ...
    }
}
于 2012-11-05T09:39:11.830 に答える
0

ifステートメントの条件は常にfalseと評価されます。つまり、リストには1がないため、falseが返されるため、それ以外の場合は一部が実行されます。

于 2012-11-05T09:38:17.280 に答える
0

list外部のcheckTextBoxメソッドを定義します。

List<int> list = new List<int>();

void CheckTextBox()
{
    if (Convert.ToInt32(DobbelWaarde.Text) == 1)
    {
        if (list.Contains(1))
        {
            Console.WriteLine("1 is allready been chosen");
        }
        else
        {
            list.Add(1);
            Console.WriteLine();
            foreach (int li in list)
            {
                Console.WriteLine(li);
                Console.WriteLine("We add 1");
            }
        }
    }
}
于 2012-11-05T09:39:04.273 に答える