winforms 列表框自动对数字进行排序,但不包括字符串

x3naxklr  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(68)

我尝试使用C#在Windows窗体中创建排行榜,但我无法找到解决方案。
下面是我当前的代码。

lstleaderboard.Items.Add(int.Parse(txtScore.Text));
ArrayList Sorting = new ArrayList();

foreach (var o in lstleaderboard.Items)
{
    Sorting.Add(o);
}

Sorting.Sort(new ReverseSort());

lstleaderboard.Items.Clear();

foreach (var o in Sorting)
{
    lstleaderboard.Items.Add(o);
}

我试着这样修改代码:

lstleaderboard.Items.Add(int.Parse(txtScore.Text));
ArrayList Sorting = new ArrayList();

foreach (var o in lstleaderboard.Items)
{
    Sorting.Add(o);
}

Sorting.Sort(new ReverseSort());

lstleaderboard.Items.Clear();

foreach (var o in Sorting)
{
    lstleaderboard.Items.Add(o + txtName.Text );
}

if (lstleaderboard.Items.Count == 11)
{
    lstleaderboard.Items.RemoveAt(lstleaderboard.Items.Count - 1);
}

但这并不真正起作用,因为它也在对名字排序,这扰乱了记分牌,并且它显示了错误的结果,例如,第一号可能是第三号。
我还在学习中,所以如果我的问题很傻或者我的代码很“奇怪”,我道歉
谢谢
这也是我的排序类:

public class ReverseSort : IComparer
{
    public int Compare(object x, object y)
    {
        return Comparer.Default.Compare(y, x);
    }
}
8wigbo56

8wigbo561#

所以lstLeaderBoard只是一个整数列表,所以你可以安全地使用整数比较,你这样做的方式,它只是在对象类型上使用一些默认的比较器,这与整数相去甚远。
简单的LINQ OrderBy就足够了:

lstLeaderBoard.Items.Add(int.Parse(txtScore.Text));
var sortedItems = lstLeaderBoard.Items.Cast<int>().OrderBy(x => x);
lstLeaderBoard.Items.Clear();
foreach (var item in sortedItems)
    lstLeaderBoard.Items.Add(item);

相关问题