Как бы я преобразовал этот код Delphi Set в C #? - PullRequest
6 голосов
/ 22 февраля 2010

У меня есть следующий код Delphi, который определяет набор, а затем простой оператор if, который проверяет, попадает ли переданное значение типа набора в определенные значения.

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

...

if OverwriteMode in [omDateAndSize, omDateOrSize, omDate, omSize] then
begin
end;

Я преобразовал его в 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))
{
}

Есть ли способ упростить его, используя какой-то эквивалентный набор C #?

Ответы [ 2 ]

8 голосов
/ 22 февраля 2010

Ну, вы можете сделать:

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

...

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

(переименуйте ValidOverwriteModes в зависимости от реального значения.)

2 голосов
/ 22 февраля 2010

Вы можете попробовать что-то вроде

FileOverwriteMode overwriteMode = FileOverwriteMode.DateAndSize;
if (new HashSet<FileOverwriteMode> 
    { 
        FileOverwriteMode.DateAndSize, 
        FileOverwriteMode.DateOrSize, 
        FileOverwriteMode.Date, 
        FileOverwriteMode.Size 
    }.Contains(overwriteMode))
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...