2010-02-22 8 views
6

Tengo el siguiente código Delphi que define un conjunto y luego una declaración if simple que verifica si un valor pasado del tipo de conjunto cae dentro de ciertos valores.¿Cómo convertiría este código Delphi Set a C#?

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

... 

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

me he convertido en C# usando un enum, pero el código para comprobar el valor ahora consiste en una declaración if or que parece un poco largo aliento para mí.

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

... 

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

¿Hay alguna manera de simplificarlo utilizando algún tipo de C# set equivalente?

Respuesta

8

Bueno, se puede hacer:

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

... 

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

(. Renombrar ValidOverwriteModes dependiendo de cuál es el significado real es)

+0

Gracias Jon, eso funciona bien. Solo necesitaba agregar HashSet después del readonly para hacerlo compilar ¡y estaba listo para empezar! (¡Disculpas por el error tipográfico!) – Pauk

+0

@Pauk: Doh - eso se debió a tener 'var' allí antes :) Lo editará en la respuesta. –

2

Usted podría intentar algo así como

FileOverwriteMode overwriteMode = FileOverwriteMode.DateAndSize; 
if (new HashSet<FileOverwriteMode> 
    { 
     FileOverwriteMode.DateAndSize, 
     FileOverwriteMode.DateOrSize, 
     FileOverwriteMode.Date, 
     FileOverwriteMode.Size 
    }.Contains(overwriteMode)) 
{ 
} 
+0

pensé que sería HashSet , pero no estaba seguro de cómo hacerlo. Me gusta la creación en línea, pero la respuesta de John simplemente me la pasa, ya que se comprobará mucho, por lo que tenerla ya creada ayuda. – Pauk