-3

機能があります...

var neighbours =
    from x in Enumerable.Range(0, array2.GetLength(0))
        .Where(x => Math.Abs(x - refx) <= 1)
    from y in Enumerable.Range(0, array2.GetLength(1))
        .Where(y => Math.Abs(y - refy) <= 1)
    select new { x, y };
neighbours.ToList().ForEach(Console.WriteLine);

この関数はうまく機能しています。でも私はしたい:

var neighbours =
    from x in Enumerable.Range(0, array2.GetLength(0))
        .Where(x => Math.Abs(x - refx) <= 1)
    from y in Enumerable.Range(0, array2.GetLength(1))
        .Where(y => Math.Abs(y - refy) <= 1)
    select new { x, y };
neighbours.ToList().ForEach(label3.Text);

動作しません。だから、私はSystem.Actionを文字列に変換したい...これについて何かアイデアはありますか?

4

2 に答える 2

11

アクションを文字列に変換する必要はありません。値を使って何かを行うアクションを作成したいとします。私はあなたが次のようなものを望むか​​もしれないと思う

neighbours.ToList().ForEach(x => label3.Text += x.ToString());

(わかりにくいですが、サンプルコードに基づいた私の推測です。)

ただし、文字列の連結という点では、これはかなり厄介です。おそらくあなたが望む:

string text = string.Join("\r\n", neighbours);
label3.Text = text;

于 2012-05-02T18:50:23.083 に答える
0

と同等だと思います

neighbours.ToList().ForEach(Console.WriteLine);

このようなものになります:

neighbours.ToList().ForEach(AppendLabelLine);

ここで、AppendLabelLineは次のように定義できます。

private void AppendLabelLine(object o) {
   var sb = new StringBuilder(label3.Content as string);
   if (sb.Length > 0) sb.AppendLine();
   sb.Append(o);
   label3.Content = sb.ToString();
}

または、インラインラムダ式を使用して同じです。

neighbours.ToList().ForEach(o => {
   var sb = new StringBuilder(label3.Content as string);
   if (sb.Length > 0) sb.AppendLine();
   sb.Append(o);
   label3.Content = sb.ToString();
});
于 2012-05-03T02:28:01.427 に答える