C#Variable = new function(){};

在C#中可以创建一个新的函数来定义一个变量?

我知道

string getResult() {
    if (a)
        return "a";
    return "b";
}
String result = getResult();

是可能的,但我正在寻找类似的东西

String result = new string getResult() {
    if (a)
        return "a";
    return "b";
}

这可能吗? 如果是这样,有人会证明吗?

编辑它是可能的

编辑:最终 - 解决方案

这是我一起野蛮攻击的最终结果

Func<string> getResult = () =>
{
    switch (SC.Status)
    {
        case ServiceControllerStatus.Running:
            return "Running";
        case ServiceControllerStatus.Stopped:
            return "Stopped";
        case ServiceControllerStatus.Paused:
            return "Paused";
        case ServiceControllerStatus.StopPending:
            return "Stopping";
        case ServiceControllerStatus.StartPending:
            return "Starting";
        default:
            return "Status Changing";
    }
};

TrayIcon.Text = "Service Status - " + getResult();

定义这种功能的一种方法是:

Func<bool, string> getResult = ( a ) => {
    if (a)
        return "a";
    return "b";
}

然后你可以调用: string foo = getResult( true ); 。 作为一个委托,它可以在需要时被存储/传递和调用。

例:

string Foo( Func<bool, string> resultGetter ){
    return resultGetter( false );
}

你也可以关闭范围内的变量:

bool a = true;

Func<string> getResult = () => {
    if (a)
        return "a";
    return "b";
}

string result = getResult();

你想使用内联if语句。

string result = a ? "a" : "b";

如果你真的想要内联,你可以为String类型创建一个扩展方法:

static class StringExtensions {
    public static string ExecuteFunc(
            this string str, 
            Func<string, string> func
        ) {
        return func(str);
    }
}

然后,当你想使用它时,你会这样做:

string str = "foo";

string result = str.ExecuteFunc( s => {
        switch(s){
            case "a":
                return "A";
            default:
                return "B";
        }
    }
);
链接地址: http://www.djcxy.com/p/51091.html

上一篇: C# Variable = new function () {};

下一篇: What is the difference between a monad and a closure?