我有以下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等效来简化它?
好吧,你可以这样做:
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根据实际含义重命名.)