我想我会以错误的方式解决这个问题,我正在尝试生成一个包含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;
}
}
}
答案 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;
这确实是使用适当变量名称的好例子。您可以为letters
,letter
命名,因为它代表一个字符。
,您不是在列表中添加随机字符,而是在将其转换为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);
}