我得到了下面的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
。)