我有以下枚举 -->
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/