C# 将列表框中的项目排序为Int
解释此Windows应用程序: 我有两个按钮一个是用来在listbox1和textbox中插入数字的,第二个按钮用于将listbox1numbers中的元素排序为int或array到listbox2。它需要是int或array,因为如果我将其排序为string,那么如果我将例如3,2,10作为listbox中的元素,它将排序为10,2,3,因为它的字符串, 现在,我的排序按钮中有一段代码,我从listbox元素中生成列表,并将其排序为字符串,但不知道如何将列表转换为数组或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
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));
});
注意,这并不检查转换是否有效或类似的情况。只是解决了它,下面是代码