2010-02-22 104 views
6

我有下面的Delphi代碼,它定義了一個集合,然後是一個簡單的if語句,用於檢查集合類型的傳遞值是否落入特定值。我該如何將此Delphi集代碼轉換爲C#?

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

... 

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

我它轉換爲使用enum C#,但用於檢查值的代碼,現在由一個if or聲明,似乎有點長篇大論給我的。

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

... 

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

有沒有一種方法可以使用某種C#集合的等價方式來簡化它?

回答

8

嗯,你可以這樣做:

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

... 

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

(取決於真正的意義是什麼重命名ValidOverwriteModes

+0

感謝喬恩,那很好。我只需要在readonly之後添加HashSet 來編譯它,這很好! (道歉名稱錯別字!) – Pauk 2010-02-22 14:38:06

+0

@Pauk:Doh--那是因爲之前有'var' :)將它編輯成答案。 – 2010-02-22 15:39:08

2

你可以嘗試像

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

我認爲這將是HashSet的,但不知道該怎麼去做。我喜歡內聯創作,但約翰的回答只是爲我偷偷摸摸,因爲它會被檢查很多,所以它已經創造了幫助。 – Pauk 2010-02-22 12:06:04