c# - 混淆 C# 枚举和显式转换

标签 c# enums casting

我有以下枚举 -->

    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 是默认的枚举控制类型,我是否必须像这样 CAST 这一行 -->

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

请原谅我的无知,我只是想了解事物的原因,而不仅仅是事物如此。

最佳答案

只是没有从枚举类型到其基础类型的隐式转换。这使得不小心使用枚举作为其数值变得更加困难。

(反过来也没有转换。)

顺便说一句,从常量 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);
}

关于c# - 混淆 C# 枚举和显式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260859/

相关文章:

c# - XML 序列化和继承类型

javascript - 如何在带星号(密码字段)的文本框字段中显示最后 3 个字符?

c# - 想要清除文本框+焦点文本框+防止同一按钮上的asp.net回发

c# - .Net async ForEach() 委托(delegate)抛出任务取消异常

java - 如何为 Guice 指定默认的枚举实例?

java - 如何将 enum 与 switch 语句一起使用?

boolean 变量的 Python 枚举

apache-flex - 为什么在 ActionScript 中将日期转换为日期会失败?

c++ - 函数参数中的空指针和强制转换

go - 无法访问/转换时间。时间