2010-02-22 9 views
6

Ho il seguente codice Delphi che definisce un set e quindi una semplice istruzione if che controlla se un valore passato del tipo impostato rientra in determinati valori.Come convertire questo codice Delphi Set in C#?

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

... 

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

ho convertito in C# utilizzando un enum, ma il codice per controllare il valore ora è composta da una dichiarazione if or che sembra un po 'lungo senza fiato per me.

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

... 

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

C'è un modo per semplificarlo utilizzando un qualche tipo di equivalente C# set?

risposta

8

Beh, si può fare:

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

... 

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

(. Rinominare ValidOverwriteModes seconda di ciò che il vero significato è)

+0

Grazie Jon, funziona bene. Ho solo bisogno di aggiungere HashSet dopo il readonly per renderlo compilabile ed è stato bello andare! (Ci scusiamo per il nome di battitura!) – Pauk

+0

@Pauk: Doh - che era dovuto ad avere 'var' lì prima :) Lo modificherà nella risposta. –

2

Si potrebbe provare qualcosa di simile

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

ho pensato che sarebbe stato HashSet , ma non ero sicuro di come farlo. Mi piace la creazione in linea, ma la risposta di John mi ha appena nascosto perché è stata controllata molto, quindi averla già creata aiuta. – Pauk