2010-02-22 68 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