2014-04-15 2 views
1

메서드 호출에서 매개 변수로 열거 형을 사용하는 경우이를 매개 변수로 정의 된 형식으로 캐스팅해야합니까?메서드 매개 변수로 사용되는 경우 항상 enum을 C#으로 형변환해야합니까?

마지막 두 줄의 코드는 동일한 메소드 호출을 보여 주지만, 하나는 int로 변환되고 다른 하나는 변환되지 않습니다. 이 두 줄의 결과는 무엇이되어야 하는가?

예제에서 열거 형을 포함하는 파일은 .cs 파일이고 다른 하나는 aspx.cs 파일입니다. 나는 그것이 모두 중요해야한다고 생각하지 않지만 어쩌면 그렇게 할 것입니다.

감사합니다.

**fileOne.cs** 
[Imported] 
public class Foo 
{ 
    [Imported] 
    public class Bar 
    { 
     [Imported] 
     [PreserveCase] 
     public enum Bam 
     { 
      [PreserveCase] 
      Low = 10, 
      [PreserveCase] 
      Medium = 50, 
      [PreserveCase] 
      High = 100 
     } 
    } 
    …code… 
    [PreserveCase] 
    public static void someMethod(string aString, int aNumber) {} 
    …code… 
} 

**fileTwo.aspx.cs** 
…code… 

string someStuffForJscript = @” 
function afunction(doesntMatter) 
{{ 
    Foo.Bar.someMethod(""This is a string."", (int)Foo.Bar.Bam.Medium); 
    Foo.Bar.someMethod(""This is a string."", Foo.Bar.Bam.Medium); 
}} 

*이 개념은 지나치게 단순화되었지만 개념은 그대로 유지됩니다. 열거 형이 사용되는 이유에 관해서 여기에서 보는 것 이상으로 많은 이유가 있습니다.

+4

왜 메서드에서 'enum'유형을 허용하지 않습니까? 메서드에서'int'를 받아들이므로 그것을 캐스팅해야합니다. –

+0

@SimonWhitehead : 대답을 주셔서 감사합니다. 그리고 귀하의 질문에 대답하십시오 ...이 특별한 경우에 위에서 설명한 모든 방법은 수십만 개의 파일로 수백만 번 사용되는 레거시 코드입니다. 만지기 위하여 나의 부호가 아니, 솔직히, 그것을위한 좋은 이유가 있을지도 모르다. 나는 단지 그것을 사냥하지 않았다. –

+0

@SimonWhitehead - (int)에 캐스트가없는 메서드 호출에서이 경우 코드가 문자열이기 때문에 컴파일 타임 오류가 발생하지 않습니다. 그러나 내부적으로는 어떤 일이 일어날 것입니까? –

답변

1

메서드 호출에서 매개 변수로 enum을 사용하는 경우 매개 변수로 정의 된 형식으로 캐스팅해야합니까? this page에서

:

하지만, 명시 적 캐스트가 필수 유형 열거 형으로 변환 할 필요가있다. 예를 들어, 다음 명령문은 enum을 int로 변환하는 캐스트를 사용하여 열거 형 Sun을 int 유형의 변수에 지정합니다.

int x = (int)Days.Sun; 
관련 문제