我如何将此Delphi Set代码转换为C#?

时间:2010-02-22 11:45:59

标签: c# delphi set

我有以下Delphi代码定义了一个set,然后是一个简单的if语句,用于检查set类型的传递值是否落在特定值内。

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#set等效来简化它?

2 个答案:

答案 0 :(得分:8)

嗯,你可以这样做:

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

...

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

(根据真实含义重命名ValidOverwriteModes。)

答案 1 :(得分:2)

您可以尝试类似

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