2010-02-22 21 views
6

Bir kümeyi tanımlayan aşağıdaki Delphi kodunu ve sonra set tipinin geçirilen bir değerinin belirli değerler içinde olup olmadığını kontrol eden basit bir if deyim var.Bu Delphi Set kodunu C# nasıl değiştirebilirim?

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

... 

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

Bir enum kullanarak C# birine dönüştürmesi, ama değerini kontrol etmek için kod artık biraz uzun bana soluklu görünen bir if or açıklamada oluşur.

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

... 

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

Bir çeşit C# kümesi eşdeğerini kullanarak bunu basitleştirmenin bir yolu var mı?

cevap

8

Well gibi bir şey deneyebilirsiniz, yapabileceğiniz:

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

... 

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

(. Gerçek anlamı ne bağlı ValidOverwriteModes Rename)

+0

Teşekkürler Jon, bu güzel çalışıyor. Derlemeyi derhal yaptıktan sonra HashSet 'u eklemem gerekti ve gitmek güzeldi! (İsim yazım hatası için özür dileriz!) – Pauk

+0

@Pauk: Doh - Bu, daha önce var olan sahip olmasından kaynaklanıyordu. –

2

Sen

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

Ben HashSet olacağını düşündüm ama bu konuda nasıl gideceğinden emin değildim. Satır içi yaratımı sevdim, ama John'un cevabı sadece benim için gizliyor çünkü çok üzerinde kontrol edilecek, bu yüzden zaten oluşturulmuş olması yardımcı oluyor. – Pauk

İlgili konular