将枚举转换为uint

ste*_*ana -1 c# windows-phone-8.1

在以下示例中,当枚举已经是uint时,为什么必须转换为uint?也做: uint,甚至改变什么?如果我删除它,我会得到相同的错误.args.Progress是一个uint.

switch (args.Progress)
{
    case (uint) Values.value1: // works
        break;
    case Values.value2: // error
        break;
}

public enum Values : uint
{
    value1,
    value2
};
Run Code Online (Sandbox Code Playgroud)

Tox*_*ron 6

规范: uint没有成为一个uint.它只定义每个成员的类型,但enum仍然是一个enum.

从枚举定义如下:

public enum Foo : uint
{
    MemberA,
    MemberB
}
Run Code Online (Sandbox Code Playgroud)

编译器(或多或少)创建一个包含常量的类

public class Foo
{
    public const uint MemberA = 0;

    public const uint MemberB = 1;
 }
Run Code Online (Sandbox Code Playgroud)

指定: long或任何内容的原因是为了确保您的值适合那里并且它正确映射到您尝试将其投射到的任何变量.使用DllImportC代码时,将其映射到头文件中的常量值也很重要.