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

我没有得到你的代码!

首先你的列表没有元素

你的代码,可能是这样的:

 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 即 list 没有 1 所以它返回 false 因此 else 部分被执行。

于 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 回答