Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将此Delphi集合代码转换为C#?_C#_Delphi_Set - Fatal编程技术网

如何将此Delphi集合代码转换为C#?

如何将此Delphi集合代码转换为C#?,c#,delphi,set,C#,Delphi,Set,我有下面的Delphi代码,它定义了一个集合,然后是一个简单的if语句,用于检查集合类型的传递值是否在某些值范围内 TOverwriteMode = (omNone, omDateAndSize, omDateOrSize, omDate, omSize, omForce); ... if OverwriteMode in [omDateAndSize, omDateOrSize, omDate, omSize] then begin end; 我已经使用enum将其转换为C#,但是用于检

我有下面的Delphi代码,它定义了一个集合,然后是一个简单的if语句,用于检查集合类型的传递值是否在某些值范围内

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

...

if OverwriteMode in [omDateAndSize, omDateOrSize, omDate, omSize] then
begin
end;
我已经使用
enum
将其转换为C#,但是用于检查值的代码现在由
if或
语句组成,这对我来说似乎有点冗长

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

...

if ((overwriteMode == FileOverwriteMode.DateAndSize) || 
    (overwriteMode == FileOverwriteMode.DateOrSize) || 
    (overwriteMode == FileOverwriteMode.Date) || 
    (overwriteMode == FileOverwriteMode.Size))
{
}

有没有一种方法可以使用某种C#集等价物来简化它?

您可以尝试以下方法

FileOverwriteMode overwriteMode = FileOverwriteMode.DateAndSize;
if (new HashSet<FileOverwriteMode> 
    { 
        FileOverwriteMode.DateAndSize, 
        FileOverwriteMode.DateOrSize, 
        FileOverwriteMode.Date, 
        FileOverwriteMode.Size 
    }.Contains(overwriteMode))
{
}
FileOverwriteMode overwriteMode=FileOverwriteMode.DateAndSize;
if(新哈希集)
{ 
FileOverwriteMode.DateAndSize,
FileOverwriteMode.DateOrSize,
FileOverwriteMode.Date,
FileOverwriteMode.Size
}.Contains(覆盖模式))
{
}
好吧,你可以做:

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

...

if (ValidOverwriteModes.Contains(overwriteMode))
{
    // ...
}
private static readonly HashSet validverwritemodes
=新哈希集
{
FileOverwriteMode.DateAndSize,FileOverwriteMode.DateOrSize,
FileOverwriteMode.Date,FileOverwriteMode.Size,
};
...
if(ValidOverwriteModes.Contains(overwriteMode))
{
// ...
}

(重命名
validverwritemodes
取决于它的真正含义。)

我原以为它会是HashSet,但不知道该怎么做。我喜欢内联创建,但是John的回答只是偷偷地告诉我,因为它会被检查很多次,所以已经创建了它会有所帮助。谢谢Jon,这很好。我只需要在readonly之后添加HashSet就可以编译了,这很好!(对名字输入错误表示歉意!)@Pauk:Doh-这是因为之前有
var
在那里:)将把它编辑到答案中。