2009-08-11 9 views
4

I가 다음 열거 -> 내가 여기에 사용 혼란과 명시 적 변환

public enum SyncStatus 
    { 
     Unavailable = 0, 
     Checking = 5, 
     StartedAspNetDb = 10, 
     FinishedAspNetDb = 20, 
     StartedMatrixDb = 30, 
     FinishedMatrixDb = 40, 
     StartedConnectDb = 50, 
     FinishedConnectDb = 60, 
     StartedCmoDb = 70, 
     FinishedCmoDb = 80, 
     StartedMcpDb = 90, 
     FinishedMcpDb = 100 
    } 

- 이해가 안 무엇>

 SyncInBackground.ReportProgress(SyncStatus.StartedAspNetDb); 
     MergeRepl aspnetdbMergeRepl = new MergeRepl(SystemInformation.ComputerName + "\\SQLEXPRESS", "WWCSTAGE", "aspnetdb", "aspnetdb", "aspnetdb"); 
     aspnetdbMergeRepl.RunDataSync(); 
     SyncInBackground.ReportProgress(SyncStatus.FinishedAspNetDb); 

     SyncInBackground.ReportProgress(SyncStatus.StartedMatrixDb); 
     MergeRepl matrixMergeRepl = new MergeRepl(SystemInformation.ComputerName + "\\SQLEXPRESS", "WWCSTAGE", "MATRIX", "MATRIX", "MATRIX"); 
     matrixMergeRepl.RunDataSync(); 
     SyncInBackground.ReportProgress(SyncStatus.FinishedMatrixDb); 

     SyncInBackground.ReportProgress(SyncStatus.StartedConnectDb); 
     MergeRepl connectMergeRepl = new MergeRepl(SystemInformation.ComputerName + "\\SQLEXPRESS", "WWCSTAGE", "CONNECT", "Connect", "Connect"); 
     connectMergeRepl.RunDataSync(); 
     SyncInBackground.ReportProgress(SyncStatus.FinishedConnectDb); 

이유는, 만약 int is default enum governing type입니다 그래서처럼, 나는 CAST이 줄을해야합니까 ->

SyncInBackground.ReportProgress((int)SyncStatus.Checking); 

내가 단지로처럼 내 무지를 용서 그들이 왜 그렇게 중요한지 이해하지 못한다.

+2

열거 형은 본질적으로 "유형"이 아닙니까? ReportProgress는 SyncStatus가 아니라 int를 예상하므로 캐스팅해야합니다. 내 추측. –

답변

10

열거 형에서 기본 형식으로의 암시 적 변환이 없습니다. 이로 인해 실수로 숫자 값으로 열거 형을 사용하는 것이 더 어렵습니다.

은 (이와 더 다른 변환 방법이 없다.)가

이 방법에 의해, 임의의 열거 형의 정수 0 내지 암시 적 변환이다.

아, 박스형 열거 형 값에서 그 기본 유형으로 또는 그 반대로도 박스에서 언 박싱도 가능합니다. 적어도 한 시점에서 이것은 CLI 스펙과 C# 스펙 모두에서 엉망이되었습니다. 이곳은 지금까지 수정 된 수 :

편집 :

public static class SyncStatus 
{ 
    public const int Unavailable = 0; 
    public const int Checking = 5; 
    public const int StartedAspNetDb = 10; 
    public const int FinishedAspNetDb = 20; 
    public const int StartedMatrixDb = 30; 
    public const int FinishedMatrixDb = 40; 
    public const int StartedConnectDb = 50; 
    public const int FinishedConnectDb = 60; 
    public const int StartedCmoDb = 70; 
    public const int FinishedCmoDb = 80; 
    public const int StartedMcpDb = 90; 
    public const int FinishedMcpDb = 100; 
} 

을 또는 방법을 쓰기 : 당신이 실제로 그냥 숫자로 값을 사용하려면 경우

여기에 다른 옵션들 이렇게 :

static void ReportProgress(SyncStatus status) 
{ 
    SyncInBackground.ReportProgress((int) status); 
} 
+0

그래서 어떤 유형의 열거 형을 만들 수 있더라도 항상 그것을 사용해야 할 수도있는 유형으로 변환해야합니다. 추론은 나 자신으로부터 나를 보호하기위한 것인가? 나 맞아? –

+0

예. 정수가 필요한 경우 대신 상수가있는 정적 클래스를 사용하십시오. –

+1

:) 고마워, 내 궁극적 인 목표는 진행률 표시 줄에'int'를 사용하고 레이블 컨트롤에'문자열 '부분을 사용할 수있게하는 것이 었습니다. 내가 잘못된 도구를 사용하고있는 것처럼 보입니다. –

관련 문제