基于条件运行方法的快速/简便方法

时间:2012-09-17 13:47:49

标签: c# operators

有没有办法基于条件语句运行方法,如null-coalescing / ternary运算符?

有时候,我的代码中有这样的东西:

if(Extender.GetSetting<string>("User") == null)
{
     ConfigureApp();
}
else
{
     loadUser();
}

有没有办法让我有类似的东西:

Extender.GetSettings<string>("User")?? ConfigureApp() : loadUser();

Extender.GetSettings<string>("User") == null ? ConfigureApp() : loadUser();

4 个答案:

答案 0 :(得分:8)

这是可能的,但它不可读。 if语句要好得多。

(Extender.GetSettings<string>("User") == null ? (Action)ConfigureApp : loadUser)();

答案 1 :(得分:3)

你可以写一行如下:

 (Extender.GetSetting<string>("User") == null ? (Action)(()=>ConfigureApp()) : (Action)(()=>loadUser()) )();

但是,此代码添加到if语句的唯一区别是由于委托的构造而导致性能降低。这不是一个好主意。

答案 2 :(得分:1)

可能是这样的:

class Program {
    static void Main(string[] args) {
        String s = "";
        Launcher(s == "user1", A1, A2);
        s = "user1";
        Launcher(s == "user1", A1, A2);
    }

    static void Launcher(Boolean b, Action a1, Action a2) {
        if (b) { a1(); } else { a2(); }
    }

    static void A1() {
        Console.WriteLine("action 1");
    }

    static void A2() {
        Console.WriteLine("action 2");
    }
}

答案 3 :(得分:1)

简单,快捷,简短。

if (Extender.GetSetting<string>("User") == null) ConfigureApp(); else loadUser();