2011-09-16 6 views
1

아래의 C# 코드는 case으로 시작하는 두 줄에 오류가 있음을 나타냅니다. 오류는 "상수 값이 필요합니다"문자열 값과 열거 형 문자열 값 비교

아래의 VB.NET 코드가 작동합니다. 이 코드를 C#으로 작성된 실제 앱의 샘플로 사용하고 있습니다.

문제가 보이지 않지만 그 중 하나가 존재하지 않는다는 의미는 아닙니다. 두 가지 온라인 코드 변환기를 사용하여 구문을 다시 확인했습니다. 두 가지 모두 동일한 결과를 반환하므로 오류가 발생합니다.

ExportFormatType은 타사 라이브러리의 열거 형입니다.

제안 사항? 감사!

public void ExportCrystalReport(string exportType, string filePath) 
    { 
     if (_CReportDoc.IsLoaded == true) 
     { 
      switch (exportType) 
      { 
       case ExportFormatType.PortableDocFormat.ToString(): // Or "PDF" 
        ExportTOFile(filePath, ExportFormatType.PortableDocFormat); 
        break; 
       case ExportFormatType.CharacterSeparatedValues.ToString(): // Or "CSV" 
        ExportTOFileCSV(filePath, ExportFormatType.CharacterSeparatedValues); 

        break; 
      } 
     } 


Public Sub ExportCrystalReport(ByVal exportType As String, ByVal filePath As String) 

     If _CReportDoc.IsLoaded = True Then 
      Select Case exportType 
       Case ExportFormatType.PortableDocFormat.ToString 'Or "PDF" 
        ExportTOFile(filePath, ExportFormatType.PortableDocFormat) 
       Case ExportFormatType.CharacterSeparatedValues.ToString ' Or "CSV" 
        ExportTOFileCSV(filePath, ExportFormatType.CharacterSeparatedValues) 

답변

5

C#의 case 문 레이블은 컴파일시 알려진 값이어야합니다. 나는이 제한이 VB.NET에 해당한다고 생각하지 않는다.

원칙적으로 ToString()은 임의의 코드를 실행할 수 있으므로 값이 컴파일 타임에 알려지지 않습니다 (귀하의 경우에도 열거 형 임에도 불구하고).

: 당신이 경우/다른 문에 스위치를 변환 할 수

ExportFormatType exportTypeValue = Enum.Parse(typeof(ExportFormatType), exportType); 
switch(exportTypeValue) 
{ 
    case ExportFormatType.PortableDocFormat: // etc... 

나 :

당신이 중 하나를 먼저 열거에 exportType을 분석하고, C#으로 열거 값을 전환 할 수 있습니다이 문제를 해결하려면
if(exportType == ExportFormatType.PortableDocFormat.ToString()) 
    // etc... 
+0

전달 된 문자열이 열거 형에 대해 정의 된 명명 된 상수 중 하나가 아닌 경우를 처리하려면 여기에서'Enum.TryParse'를 사용해야합니다. –

+0

@ 짐롤 좋은 지적. 그리고 그 라인을 따라,'default' case는 보통 임의 입력 switch 문을 다룰 때 좋은 생각입니다. – LBushkin