可以在C#中完成以下操作吗?:
var greeting = "Hello" + function ()
{
return " World";
}() + "!";
我想做一些与此相关的事情(C#伪代码):
var cell = new TableCell { CssClass = "", Text = return delegate ()
{
return "logic goes here";
}};
基本上我想实现某些逻辑的内联作用域,而不是将该块逻辑移动到单独的方法中。
答案 0 :(得分:9)
var greeting = "Hello" + new Func<String>(() => " World")() + "!";
答案 1 :(得分:2)
如果您使用的是匿名类型,那么您必须明确地转换匿名方法或lambda表达式;如果您要分配已知类型的属性,则不会。例如:
var cell = new TableCell { CssClass = "", Text = (Func<string>) (() =>
{
return "logic goes here";
})};
稍微丑陋,但它确实有效。
但是,是的,您当然可以使用这样的匿名函数。当你想要检索文本时,你需要明确地调用它,请注意:
Console.WriteLine("{0}: {1}", cell.CssClass, cell.Text());
答案 2 :(得分:2)
我自己会提出一个更详细的答案:
var tr = new TableRow { CssClass = "" };
tr.Cells.AddRange(new []
{
new TableCell { CssClass = "", Text = "Hello" },
new TableCell { CssClass = "", Text = new Func<String>(() =>
{
// logic goes here
return "";
})()}
});