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;

これは、適切な変数名を使用する良い例です。は単一の文字を表しているためletters、名前を付けることができます。letter

また、ランダムな文字をリストに追加するのではなく、ichar にキャストした後に追加するだけです。コードを次のように変更します。

 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 に答える