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

Pau*_*auk 6 c# delphi set

我有以下Delphi代码定义了一个set,然后是一个简单的if语句,它检查set类型的传递值是否在某个值范围内.

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

...

if OverwriteMode in [omDateAndSize, omDateOrSize, omDate, omSize] then
begin
end;
Run Code Online (Sandbox Code Playgroud)

我已经使用a将它转换为C#enum,但现在检查值的代码包含一个if or似乎有点长篇大论的语句.

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

...

if ((overwriteMode == FileOverwriteMode.DateAndSize) || 
    (overwriteMode == FileOverwriteMode.DateOrSize) || 
    (overwriteMode == FileOverwriteMode.Date) || 
    (overwriteMode == FileOverwriteMode.Size))
{
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用某种C#set等效来简化它?

Jon*_*eet 8

好吧,你可以这样做:

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

...

if (ValidOverwriteModes.Contains(overwriteMode))
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

(ValidOverwriteModes根据实际含义重命名.)