2010-02-22 5 views
6

집합을 정의하는 다음 델파이 코드가 있고 집합 유형의 전달 된 값이 특정 값 내에 있는지 확인하는 간단한 if 문이 있습니다.어떻게이 Delphi Set 코드를 C#으로 변환합니까?

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

... 

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

내가 enum를 사용하여 C 번호로 전환했지만 값을 확인하는 코드가 지금은 조금 긴 나에게 호흡 것 같은 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#을 사용하여 단순화 할 수있는 방법이 있습니까?

답변

8

잘 뭔가를 시도 할 수, 당신이 할 수

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

... 

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

(. 진정한 의미가 무엇인지에 따라 ValidOverwriteModes 이름 바꾸기)

+0

고마워요, 존, 잘 작동합니다. 나는 단지 컴파일하기 위해 readonly 후에 HashSet 를 추가 할 필요가 있었다. (이름 오타에 대한 사과!) – Pauk

+0

@Pauk : Doh - 이전에'var '을 가지고 있었기 때문에 :) 그것을 대답으로 편집 할 것입니다. –

2

당신은

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

을 나는 HashSet의 것이라고 생각 , 그러나 그것에 대해 어떻게 가는지 확실하지 않았다. 인라인 만들기가 마음에 들지만 요한의 답변은 많이 확인 될 것이기 때문에 나에게 몰래 간다. 그래서 이미 만들어 놓으면 도움이된다. – Pauk

관련 문제