C# 将System.Action转换为字符串
我有一个功能C# 将System.Action转换为字符串,c#,C#,我有一个功能 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
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=
从可枚举范围(0,array2.GetLength(0))中的x开始
.Where(x=>Math.Abs(x-refx)Math.Abs(y-refy)Math.Abs(x-refx)Math.Abs(y-refy)您并不是真的想将一个动作转换为字符串。您想创建一个具有值的动作。我怀疑您可能想要这样的动作:
neighbours.ToList().ForEach(x => label3.Text += x.ToString());
(很难说,但根据您的示例代码,这是我最好的猜测。)
不过,就字符串串联而言,这相当糟糕。也许您想要:
string text = string.Join("\r\n", neighbours);
label3.Text = text;
我认为这相当于
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();
});
我不知道你想实现什么,你的最后一个例子毫无意义。你到底想显示什么?你想说你想要label3。文本到所有结果的列表中吗?正如你所看到的,你的问题被否决了。你应该努力解释你想实现什么。你可能会得到一些支持锿。。。
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();
});