我有一个功能...
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转换为String ... 对此有何想法?
答案 0 :(得分:11)
您确实想要将操作转换为字符串。您希望使用值创建执行某些操作的操作。我怀疑你可能想要这样的东西:
neighbours.ToList().ForEach(x => label3.Text += x.ToString());
(这很难说,但根据您的示例代码,这是我最好的猜测。)
在字符串连接方面,这非常令人讨厌。也许你想要:
string text = string.Join("\r\n", neighbours);
label3.Text = text;
答案 1 :(得分: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();
});