2012-01-08 5 views
1

switch 문에 대한 옵션으로 enum을 사용하고 있습니다. 문제는 사용자가 유효하지 않은 옵션을 입력하여 프로그램이 충돌 한 경우입니다. 기본값을 사용하도록 추가해야하는 항목은 무엇입니까?enum 및 switch 문 사용 C#

열거 프로그램 충돌에서 주요 내 switch 문

string volString = Console.ReadLine(); 
    Options options = (Options)Enum.Parse(typeof(Options), volString); 
    // this is the line that is giving me the runtime error. Since other options are not found 

내 열거 클래스

public enum Options : byte 
    { 
     Display = 1, 
     Add, 
     Toggle, 
     Max, 
     Mean, 
     Medium, 
     Exit 
    } 

. 텍스트가 당신의 열거로 변환 할 수있는 경우

   switch (options) 
       { 
        case Options.Display: //dispaly regular time 

        case Options.Toggle://toggle 

        default: 
         Console.WriteLine("entry blah blah"); 
         break; 
+2

런타임 오류의 어떤 종류를 얻을 수 있습니까? – dasblinkenlight

답변

2

방법에 대해 :

Options value; 
if(!Enum.TryParse(volString, out value)) // note implicit <Options> 
    value = Options.SomeDefaultValue; 
+0

감사합니다, 열거와 함께 일하는 나를 위해 새로운 것입니다. 열거 형 구문 분석이 옵션 인 이유에 대해 궁금해합니다. tryparse가 더 합리적입니다. – Aaron

+0

@Aaron 첫째, "out T"는 제네릭 없이는 가능하지 않았기 때문에 가능하지 않았습니다 .net 2; 둘째로, 문자열 **이 유효한 열거 형이어야 함을 주장하려는 경우 Parse가 완벽하게 맞습니다. –

5

대신 Enum.Parse 사용 Enum.TryParse ...이 부울을 반환합니다 말할 수 있습니다. 사실이라면 스위치를 달리 실행하여 유효하지 않은 문자열을 입력했음을 사용자에게 알립니다.

0

Enum.TryParse (...)를 보면 유효하지 않은 문자열을 확인할 수 있습니다. 대신

4

사용 Enum.TryParse :

Options options; 

if(!Enum.TryParse(volString, out options)) { 
    // It wasn't valid input. 
} 
+1

샘플 코드가 정확하다고 생각하지 않습니다. – Steve

+0

@ 스티브 : 죄송합니다. 감사합니다. – Ryan

+1

나는 아직도 그것이 정확하다고 생각하지 않는다. – Steve