我得到了下面的delphi代码,它定义了一个集合,然后是一个简单的if语句,它检查集合类型的传递值是否在特定值范围内。

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集等价物来简化它?

最佳答案

好吧,你可以:

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

...

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

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

07-26 02:19