-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();
}

或者,同样使用内联 lambda 表达式:

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 回答