2010-12-30 7 views
0

은 내가 (myString) 값의 문자열을 가지고 내 솔루션에 다른 클래스에서주조 문자열 값

public enum Days{Mon, Tue, Wed} 

가있는 클래스 MyClass 다음 필드

public Days dayOfWeek; 

0, 1 또는 2입니다. 나는

myClassInstance.dayOfWeek = Convert.ToInt32(myString) 

myClassInstance.dayOfWeek = (int) myString 
을 시도

... 1가 화를 의미 0는 월을 의미 myStringvalue하도록에 dayOfWeek 같음 (myClassInstance라고 함) MyClass 년대 필드의 인스턴스를 설정하려면

하지만 둘 다 작동하지 않습니다. 나는 이것이 간단하다는 것을 확신한다. 왜이 기법들이 효과가 없습니까?

+2

은 "왜이 기술이 작동하지 않습니다?"작동합니다 열거 형은 int가 아니기 때문에. Enum 값을 int 값과 동일하게 설정할 수 없습니다. –

+1

Days 열거 형 대신 DayOfWeek를 사용하십시오. 세부 정보는 여기 -> http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx –

답변

9

정상적으로 sDays의 인스턴스로 구문 분석 할 수없는 경우를 처리하기 위해

string s = "0"; 
Days day; 
if(!Enum.TryParse(s, out day)) { 
    // error handling 
} 

string s = "0"; 
Days day = (Days)Enum.Parse(typeof(Days), s); 

또는

를 사용해보십시오.

가 동등한 열거 객체에 이름 또는 하나 개 이상의 열거 된 상수의 숫자 값의 문자열 표현을 변환 상태 Enum.Parse의 설명서에 따라 작동합니다. string의 인스턴스가 실제로

통해 열거에 의해 정의 된 값을 나타내는 경우

또한 확인할 수 있습니다

string s = "3"; 
bool defined = Enum.IsDefined(typeof(Days), s); 
// defined is false 

Enum.Parse 맹목적으로 그 값을 표시하지 않는 경우에도,이 경우 s을 구문 분석 enum Days에 의해 정의되고 Enum.Parse에서 Days의 결과에서 캐스트가 실패하지 않습니다.

또한 요일을 나타내는 기본 제공 enum이 있습니다. 이 열거 형은 System.DayOfWeek입니다. 나는 이것을 사용하는 것이 좋습니다.

마지막으로 어떤 이유로 System.DayOfWeek을 사용할 수없는 경우 Days (복수형 제거) 대신 enum의 이름을 Day으로 바꿔야합니다. 플래그를 나타내는 enum은 복수형이어야합니다. 위의 변수 day은 요일을 나타내며 요일을 나타내지는 않습니다. 따라서 열거 형 이름을 Day으로 변경해야합니다. 이는 대부분의 C# 및 .NET 프로그래머가 사용하는 naming conventions과 일치합니다.

+0

안녕하세요, 당신 말이 맞아요, 오늘 전화해야합니다. 그래도 복수 플래그에 대해 몰랐다. 플래그가 오버플로, 제로, 캐리, 네거티브와 같은 콜렉션이 될 것이지만 executeFlags와 같이 somedign이라고 부를 수 있습니다. 어쨌든 이것은 실제로 구현하는 열거 형 열거 형의 실제 이름이 아닙니다 ... 제 질문에 대한 답변을 시도했습니다. 내가 가진 문제는 enum이 다른 클래스에 있다는 것입니다. 액세스 수정자를 public으로 설정 했음에도 불구하고 호출 클래스에서 볼 수는 없습니다. 그건 내가 할 수 없다 myClassInstance.Days dayOfWeek. 그것은 MyClass 밖에서 이것을 선언하지 않습니다. 어떻게 됐니? – Prof

+0

나는 그것을 작동 시켰습니다 ... 나는 방금 MyClass를 사용했습니다. 그것의 인스턴스가 아닙니다. – Prof

6
당신은 그냥 변환 후 Days 열거에 int 캐스팅 할 필요가

:

myClassInstance.dayOfWeek = (Days)Convert.ToInt32(myString); 

Enum.TryParse (.NET 4 인 경우) 또는을 사용할 수도 있습니다.. 들어오는 데이터를 신뢰하는 정도에 따라 정수가 Days의 유효한 값인지 확인하기 위해 Enum.IsDefined으로 전화 할 수도 있습니다. 그렇지 않으면이 모든 경우에 Days의 인스턴스를 갖게됩니다. 이름이 지정된 값 중 하나에 해당). 다른 언급이

Days dayOfWeek; 
if (!Enum.TryParse(myString, out dayOfWeek)) { 
    dayOfWeek = Days.Mon; // or some other default, or throw 
} 

myClassInstance.dayOfWeek = dayOfWeek; 

또는

myClassInstance.dayOfWeek = (Days)Enum.Parse(typeof(Days), myString); 

또한이, 당신은 일치하는 경우 내장 DayOfWeek 열거하는 대신 사용자 정의 버전, 당신이 정말로 원하는 것을 사용하는 것이 좋습니다.

또한 언급하지 않았더라도 DayFlags 열거 형이 아니기 때문에 .NET 명명 규칙을 기반으로 한 더 나은 이름입니다.

+0

.net 3.5 용으로 개발 중입니다. 아무튼 나는 액세스 한정자를 public으로 설정 했음에도 불구하고 myClassInstance의 열거 형에 액세스 할 수 없기 때문에 (Days)로 캐스팅 할 수 없습니다. – Prof

+0

'MyClass' 안에 정의했다면, MyClass를 사용할 필요가 있습니다.MyClass' 밖에서 참조 할 수 있습니다. – bdukes

2

시도 :

Days d = (Days)Enum.Parse(typeof(Days), myString); 

더 완벽한 예는 here이다.

+1

myString == "Mon"또는 "Tues"등일 경우에만 작동하지 않습니다 – bendewey

+0

http://msdn.microsoft.com/en-us/library/essfb559.aspx docs 내가 틀렸다고 "name 또는 numeric입니다. value " – bendewey

+0

아니요, 정수에도 사용할 수 있습니다. 적어도, 그것은 내 테스트에서 않습니다. –

0

당신은 주조하는 데 필요한 intDays에 :

myClassInstance.dayOfWeek = (Days)Convert.ToInt32(myString); 
0

당신이 int로 문자열을 캐스팅하고 싶은 (또는 당신이 좋은 방법으로 그것을 수행하려는 경우 tryparse)

다음 코드를 사용하여 enum 값을 설정하십시오.

(일) Enum.ToObject (typeof (Days), intValue);

0

myClassInstance.dayOfWeek = Enum.Parse(typeof(Days), myString); 

Enump.Parse

+0

문제는 Days 정의가 MyClass 내에 저장되어있어 액세스 할 수 없다는 것입니다. 나의 정의가 공개 enum 일 ({Mon, Tue, Wed})인데도 불구하고. 정적 수정자를 공개 한 후에 다른 클래스에서 액세스 할 수 있지만 MyClass에 정적을 넣을 수 없기 때문에 프로그램을 컴파일하지 않을 수 있습니다 – Prof

+0

나는 그것을 작동 시켰습니다 ... 방금 인스턴스가 아닌 MyClass.Days를 사용했습니다. 그것의! – Prof