C#将整数添加到列表

4

当我检查文本框是否等于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
因为您创建列表时总是将其设置为空,所以在第一个if之前就是这样。 - Davide Piras
你每次都在创建一个新的列表吗? - James Barrass
如果这不是在for循环中,或者你有一些缺失的代码,那就很正常。 - t3hn00b
6个回答

12

1
可能建议在记住其状态的范围内声明List。例如将其作为数据成员或静态变量。 - Romaan

4
当我运行这段代码时,它总是执行else部分的代码。
您没有在列表中添加整数。您从一个空列表开始,然后检查它是否包含1,这就是为什么它会进入else部分的原因。
您可以像这样初始化列表:
List<int> list = new List<int>() {1};

2
我认为用1进行初始化不是一个解决方案。因为在这种情况下,代码将始终进入内部if块,而我相信@Optical不希望发生这种情况。 - Romaan
2
@Romaan,其实不清楚OP到底需要什么?我想让他明白列表需要包含一些元素,至少有一个值为1的元素,这样检查的if部分才会执行。 - Habib
好的 :) 给 @Habib 打了个赞 - Romaan

2

我不理解你的代码!

首先,你的列表没有元素。

你的代码可能是这样的:

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

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);
                // ...
    }
}

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");
            }
        }
    }
}

0

if语句中的条件始终被评估为false,即列表中没有1,因此返回false,因此执行else部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接