在C#中按字母顺序排列随机字符列表

时间:2013-10-10 19:54:16

标签: c# linq list char alphabetized

我想我会以错误的方式解决这个问题,我正在尝试生成一个包含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;

        }

    }
}

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

这确实是使用适当变量名称的好例子。您可以为lettersletter命名,因为它代表一个字符。

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

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