Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将列表框中的项目排序为Int_C#_Arrays_Sorting_Visual Studio 2010_Listbox - Fatal编程技术网

C# 将列表框中的项目排序为Int

C# 将列表框中的项目排序为Int,c#,arrays,sorting,visual-studio-2010,listbox,C#,Arrays,Sorting,Visual Studio 2010,Listbox,解释此Windows应用程序: 我有两个按钮一个是用来在listbox1和textbox中插入数字的,第二个按钮用于将listbox1numbers中的元素排序为int或array到listbox2。它需要是int或array,因为如果我将其排序为string,那么如果我将例如3,2,10作为listbox中的元素,它将排序为10,2,3,因为它的字符串, 现在,我的排序按钮中有一段代码,我从listbox元素中生成列表,并将其排序为字符串,但不知道如何将列表转换为数组或int: private

解释此Windows应用程序: 我有两个按钮一个是用来在listbox1和textbox中插入数字的,第二个按钮用于将listbox1numbers中的元素排序为int或array到listbox2。它需要是int或array,因为如果我将其排序为string,那么如果我将例如3,2,10作为listbox中的元素,它将排序为10,2,3,因为它的字符串, 现在,我的排序按钮中有一段代码,我从listbox元素中生成列表,并将其排序为字符串,但不知道如何将列表转换为数组或int:

private void button2_Click(object sender, EventArgs e)
    {
        List<String> lista = new List<string>();

        foreach (String x in listBox1.Items)
        {
            lista.Add(x);
        }
        lista.Sort();
        foreach (string a in lista)
        {
            listBox2.Items.Add(a);
        }
    }

我自己找到了解决方案,代码如下:

private void button2_Click(object sender, EventArgs e)
    {
        List<int> lista = new List<int>();

        foreach (string x in listBox1.Items)
        {
            lista.Add(Convert.ToInt32(x));
        }
        lista.Sort();
        foreach (int a in lista)
        {
            listBox2.Items.Add(a);
        }
    }
我希望有人觉得这有帮助

列表框接受任何类型的元素,而不仅仅是字符串。因此,您可以直接添加int。不需要转换为字符串。然后可以再次检索int

但是,我会将值存储在列表中,而不是列表框的items集合中

private List<int> numbers = new List<int>();

private void btnAdd_Click(object sender, EventArgs e)
{
    if(Int32.TryParse(TextBox1.Text, out int n)) {
        numbers.Add(n);
        listBox1.DataSource = null;
        listBox1.DataSource = numbers;
    } else {
        MsgBox.Show("You must enter an integer!");
    }
}

private void btnSort_Click(object sender, EventArgs e)
{
    numbers.Sort();
    listBox1.DataSource = null;
    listBox1.DataSource = numbers;
}
设置listbox的数据源不会将项目插入listbox,而是告诉listbox显示集合中的元素,而不是它自己的内部集合


如果两次分配同一个列表,listbox将不会注意到列表的内容发生了更改。因此,请先指定null。

您可以将一个比较委托传递给lista.Sort方法,该方法将项目强制转换为整数,并按数值对其进行排序。像这样:

lista.Sort((a, b) =>
{
    return Convert.ToInt32(a).CompareTo(Convert.ToInt32(b));
});

注意,这并不检查转换是否有效或类似的情况。

只是解决了它,下面是代码