我有以下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等效来简化它?
答案 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))
{
}