JavaScript-подобные анонимные функции в C # - PullRequest
0 голосов
/ 31 июля 2009

Можно ли сделать следующее в C #?

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

Я хочу сделать что-то вроде этого (псевдокод C #):

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

По сути, я хочу реализовать внутреннюю область видимости некоторой логики вместо того, чтобы перемещать эту логику в отдельный метод.

Ответы [ 3 ]

9 голосов
/ 31 июля 2009
var greeting = "Hello" + new Func<String>(() => " World")() + "!";
2 голосов
/ 31 июля 2009

Собираюсь дать более подробный ответ сам:

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 "";
    })()}
});
2 голосов
/ 31 июля 2009

Если вы используете анонимный тип, вам придется явно приводить анонимный метод или лямбда-выражение; если вы присваиваете свойство, тип которого уже известен, вы не будете. Например:

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

Это немного страшнее, но работает.

Но да, вы, безусловно, можете использовать анонимную функцию, подобную этой. Вам нужно явно вызвать его, когда вы хотите получить текст, учтите:

Console.WriteLine("{0}: {1}", cell.CssClass, cell.Text());
...