2012-09-17 36 views
6

Có cách nào để chạy một phương thức dựa trên câu lệnh điều kiện như toán tử kết hợp/ternary không?Cách nhanh chóng/dễ dàng để chạy một phương pháp dựa trên điều kiện

Đôi khi, tôi có một cái gì đó như thế này trong mã của tôi:

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

Có cách nào tôi có thể có một cái gì đó như:

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

HOẶC

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

Câu hỏi thú vị. –

+0

Xin lỗi vì sự thiếu hiểu biết của tôi, nhưng không phải thứ ba sẽ làm việc? – npinti

+1

Đừng làm điều đó, * xóa * tốt hơn * ngắn * khi nói đến mã. Điều này có thể trông đẹp bây giờ, nhưng nếu bạn quay trở lại nó vào năm tới bạn sẽ nghĩ rằng "mẹ thánh của mã nguồn này là khó chịu". đó là bởi vì bạn sẽ quên những gì nó phải làm. – Alex

Trả lời

8

Có thể, nhưng nó không được tái có thể sử dụng được. Câu hỏi if tốt hơn nhiều.

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

Yuk. 1 cho cảnh báo về khả năng đọc. Gắn bó với 'if'. – spender

+0

Tôi sẽ thêm đề xuất để đọc sách "Hoàn thành mã" của Steve McConnell. –

+0

Cảm ơn! Vì vậy, về cơ bản điều này là không thể trong C# 2.0? – rtuner

3

Bạn có thể viết một dòng như:

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

Tuy nhiên, sự khác biệt duy mã này thêm vào tuyên bố if của bạn là hiệu suất chậm hơn do việc xây dựng các đại biểu. Đó không phải là một ý hay.

1

có thể cái gì đó như:

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"); 
    } 
} 
1

đơn giản, nhanh chóng và ngắn cách.

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

Cảm ơn, tôi thực sự đã kết thúc bằng cách sử dụng một cái gì đó như thế này mặc dù đây không phải là câu trả lời tôi đang tìm kiếm. – rtuner

Các vấn đề liên quan