2010-02-22 14 views
6

Ich habe den folgenden Delphi-Code, der eine Menge definiert und dann eine einfache if-Anweisung, die überprüft, ob ein übergebener Wert des Settyps innerhalb bestimmter Werte liegt.Wie würde ich diesen Delphi-Set-Code in C# konvertieren?

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

... 

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

I umgewandelt habe es in C# ein enum verwenden, aber der Code für den Wert Überprüfung besteht nun aus einer if or Aussage, die ein bisschen zu mir langatmig zu sein scheint.

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

... 

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

Gibt es eine Möglichkeit, es zu vereinfachen, indem Sie eine Art von C# -Set-Äquivalent verwenden?

Antwort

8

Nun versuchen könnte, können Sie tun:

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

... 

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

(. Umbenennen ValidOverwriteModes je nachdem, was die wahre Bedeutung ist)

+0

Danke Jon, das funktioniert gut. Ich musste nur HashSet nach dem Readonly hinzufügen, um es kompilieren zu lassen und es war gut zu gehen! (Entschuldigung für den Namen Tippfehler!) – Pauk

+0

@Pauk: Doh - das war wegen "Var" dort vorher :) Wird es in die Antwort bearbeiten. –

2

Sie so etwas wie

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

dachte ich, es HashSet wäre , aber war nicht sicher, wie es geht. Ich mag die Inline-Kreation, aber die Antwort von John schleicht sie nur für mich, da sie viel geprüft wird, also hilft es, wenn sie bereits erstellt wurde. – Pauk

Verwandte Themen