2010-02-22 22 views
6

Tôi đã có mã Delphi sau đây định nghĩa một tập hợp và sau đó một câu lệnh if đơn giản để kiểm tra xem giá trị được truyền của loại tập hợp có nằm trong các giá trị nhất định hay không.Làm cách nào để chuyển đổi mã Delphi Set này thành C#?

TOverwriteMode = (omNone, omDateAndSize, omDateOrSize, omDate, omSize, omForce); 

... 

if OverwriteMode in [omDateAndSize, omDateOrSize, omDate, omSize] then 
begin 
end; 

tôi đã chuyển đổi nó để C# sử dụng một enum, nhưng mã để kiểm tra giá trị hiện nay bao gồm một tuyên bố if or mà có vẻ hơi dài hơi với tôi.

public enum FileOverwriteMode 
{ 
    None, 
    DateAndSize, 
    DateOrSize, 
    Date, 
    Size, 
    Force, 
} 

... 

if ((overwriteMode == FileOverwriteMode.DateAndSize) || 
    (overwriteMode == FileOverwriteMode.DateOrSize) || 
    (overwriteMode == FileOverwriteMode.Date) || 
    (overwriteMode == FileOverwriteMode.Size)) 
{ 
} 

Có cách nào để đơn giản hóa nó bằng cách sử dụng loại tương đương C# nào đó không?

Trả lời

8

Vâng, bạn có thể làm:

private static readonly HashSet<FileOverWriteMode> ValidOverwriteModes 
    = new HashSet<FileOverWriteMode> 
{ 
    FileOverwriteMode.DateAndSize, FileOverwriteMode.DateOrSize, 
    FileOverwriteMode.Date, FileOverwriteMode.Size, 
}; 

... 

if (ValidOverwriteModes.Contains(overwriteMode)) 
{ 
    // ... 
} 

(. Đổi tên ValidOverwriteModes tùy thuộc vào những gì ý nghĩa thực sự là)

+0

Cảm ơn Jon, hoạt động tốt. Tôi chỉ cần thêm HashSet sau khi readonly để làm cho nó biên dịch và nó là tốt để đi! (Xin lỗi cho tên lỗi đánh máy!) – Pauk

+0

@Pauk: Doh - đó là do có 'var' ở đó trước :) Sẽ sửa nó thành câu trả lời. –

2

Bạn có thể thử một cái gì đó giống như

FileOverwriteMode overwriteMode = FileOverwriteMode.DateAndSize; 
if (new HashSet<FileOverwriteMode> 
    { 
     FileOverwriteMode.DateAndSize, 
     FileOverwriteMode.DateOrSize, 
     FileOverwriteMode.Date, 
     FileOverwriteMode.Size 
    }.Contains(overwriteMode)) 
{ 
} 
+0

Tôi nghĩ rằng nó sẽ là HashSet , nhưng không chắc chắn làm thế nào để đi về nó. Tôi thích việc tạo ra nội tuyến, nhưng câu trả lời của John chỉ lẻn nó cho tôi vì nó sẽ được kiểm tra dựa trên rất nhiều, do đó, nó đã được tạo ra giúp. – Pauk

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