0

我想我这样做是错误的,我试图生成一个包含 30 个随机字符的列表。然后用 LINQ 升序对它们进行排序。但是我在我的 LINQ 排序中的字母变量下得到了一条红色的波浪线

namespace LetterSort
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //create random list
        List<char> random = new List<char>();
        Random r = new Random();

        public void Form1_Load(object sender, EventArgs e)
        {
            char letters;


            //insert random letters           
            for (int i = 0; i < 30; i++)
            {
                random.Add((char)i);
                letters = (char)((int)'a' + r.Next(0, 26));
                listBox1.Items.Add("Random Letters:" + letters);
            }

            //in ascending
                var asc =
                    from a in letters //error here
                    orderby a ascending
                    select a;

        }

    }
}
4

3 回答 3

4

random不是letters

var asc = from a in random
          orderby a
          select a;

您可以使用这样的更多 LINQ 解决方案:

random = Enumerable.Range(0,30)
                   .Select(a=>(char)r.Next(97,123)).ToList();

//then assign the DataSource of your listBox1 instead of adding each item:
listBox1.Format += (s,e) => {
  e.Value = "Random Letters: " + e.Value;
};
listBox1.DataSource = random;

//in ascending order
var asc = random.OrderBy(a=>a);
于 2013-10-10T19:56:16.780 回答
1
var asc = from a in random
orderby a ascending
select a;
于 2013-10-10T20:00:17.543 回答
0

您收到的错误是因为您需要List<char>在查询中进行排序,并且您将其传递给单个字符letters

var asc =
        from a in random//changehere
        orderby a ascending
        select a;

这确实为使用正确的变量名提供了一个很好的例子。您可以命名您的lettersletter因为它代表单个字符。

此外,您不会将随机字符添加到列表中,而是i在将其转换为 char 后添加。更改您的代码,例如:

 for (int i = 0; i < 30; i++)
    {
        letters = (char)((int)'a' + r.Next(0, 26));
        random.Add(letters);
        listBox1.Items.Add("Random Letters:" + letters);
    }
于 2013-10-10T19:57:39.417 回答