0

可以在 C# 中完成以下操作吗?:

var greeting = "Hello" + function ()
{
    return " World";
}() + "!";

我想做一些事情(C# 伪代码):

var cell = new TableCell { CssClass = "", Text = return delegate ()
{
     return "logic goes here";
}};

基本上我想实现一些逻辑的内联范围,而不是将该块逻辑移动到一个单独的方法中。

4

3 回答 3

10
var greeting = "Hello" + new Func<String>(() => " World")() + "!";
于 2009-07-31T10:52:35.767 回答
2

如果您使用匿名类型,则必须显式转换匿名方法或 lambda 表达式;如果您要分配给类型已知的属性,则不会。例如:

var cell = new TableCell { CssClass = "", Text = (Func<string>) (() =>
{
     return "logic goes here";
})};

它有点丑陋,但它有效。

但是,是的,您当然可以使用这样的匿名函数。当您想要检索文本时,您需要显式调用它,请注意:

Console.WriteLine("{0}: {1}", cell.CssClass, cell.Text());
于 2009-07-31T10:59:58.950 回答
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 "";
    })()}
});
于 2009-07-31T11:53:55.487 回答