2012-04-27 47 views

Trả lời

9

phiên bản đầu tiên của bạn đã bao gồm nhiều nhà khai thác trong một biểu thức. Có vẻ như bạn muốn áp dụng nhiều toán hạng ("chó", "mèo", "con người") cho một nhà điều hành duy nhất (== trong trường hợp này).

Đối mà cụ thể ví dụ bạn có thể sử dụng:

// Note: could extract this array (or make it a set etc) and reuse the same 
// collection each time we evaluate this. 
if (new[] { "dog", "cat", "human" }.Contains(foo)) 

Nhưng không có chung một kích thước phù hợp cho tất cả các phiên bản của tất cả các nhà khai thác này cho.

EDIT: Như đã lưu ý trong các nhận xét, phần trên sẽ không hoạt động tốt như phiên bản được mã hóa cứng.

+0

Tôi phải chỉ ra, rằng điều này sẽ có hiệu suất tồi tệ hơn chỉ đơn giản là cứng mã hóa biểu thức (nhưng có khả năng linh hoạt hơn/duy trì) –

+0

@DaveBish: Sẽ làm, cảm ơn. –

+0

@JonSkeet: cảm ơn. Tôi đã nói lại câu hỏi của mình. Những gì tôi so sánh (chó, mèo, con người) là một toán hạng, sau đó là "foo" là gì? Operatee? – KMC

1

có thể làm điều gì đó như thế này:

List<string> values = new List<string> {"dog", "cat", "human"}; 
values.Any(s=>s.Equals(foo)); 

Nhưng theo ý kiến ​​của tôi mã bạn viết là đã có thể đọc được nhiều hơn thì giải pháp nào khác. Nếu chúng ta không nói ở đây về hàng chục tùy chọn có thể, một cách tự nhiên.

+0

Tại sao nên sử dụng Bất kỳ thay vì Chứa? –

+0

@JonSkeet: nó có tạo sự khác biệt trong Danh sách không? – Tigran

+0

Vâng, nó * đơn giản hơn * để sử dụng 'Chứa' ... tại sao không sử dụng mã đơn giản hơn, điều này cũng tương thích với .NET 2.0? –

0

Bạn luôn có thể thử nó ra, biên dịch và xem cho chính mình :)

("dog" || "cat" || "human") 

không phải là một biểu hiện ý nghĩa đối với C#

lẽ bạn có thể đặt chúng trong một mảng và vòng qua chúng.

Hoặc vẫn tốt hơn, đặt chúng vào một mảng và đưa ra biểu thức lambda tuyệt vời.

1

trường hợp sử dụng công tắc

switch(foo) 
{ 
    case "dog": 
    case "cat": 
    case "human": 
    //Your Code 
    break; 
} 
Các vấn đề liên quan