2013-10-10 32 views
0

我想我正在讨论这个错误的方式,我试图产生一个30个随机字符的列表。然后按升序对它们进行排序。但是我收到的信件变量下的红色波浪线线在我的LINQ排序在C中的字符串随机字符列表#

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; 

     } 

    } 
} 
+1

什么是红色的波浪线说? –

回答

4

randomletters

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

很好用的可爱Linq – Alireza

0

您得到的错误是因为您需要在您的查询中订购List<char>,并且您将它传递给单个字符letters

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

这确实是使用适当的变量名的好例子。您可以将lettersletter命名为代表单个字符。

还有,你不是在你的列表中添加随机字符,而是在将它转换为字符后才添加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); 
    } 
+1

非常感谢!这解决了它! – user2802752

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