How would I convert this Delphi Set code to C#?

c#, delphi, set

Solution

Well, you can do:

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

...

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

(Rename `ValidOverwriteModes` depending on what the real meaning is.)

Problem

I've got the following Delphi code that defines a set and then a simple if statement that checks if a passed value of the set type falls within certain values. ``` TOverwriteMode = (omNone, omDateAndSize, omDateOrSize, omDate, omSize, omForce); ... if OverwriteMode in [omDateAndSize, omDateOrSize, omDate, omSize] then begin end; ``` I've converted it to C# using an `enum`, but the code for checking the value now consists of an `if or` statement which seems a bit long winded to me. ``` public enum FileOverwriteMode { None, DateAndSize, DateOrSize, Date, Size, Force, } ... if ((overwriteMode == FileOverwriteMode.DateAndSize) || (overwriteMode == FileOverwriteMode.DateOrSize) || (overwriteMode == FileOverwriteMode.Date) || (overwriteMode == FileOverwriteMode.Size)) { } ``` Is there a way to simplify it using some kind of C# set equivalent?

Original source