关于C#:是否可以将整数强制转换为枚举?

Is it possible to cast integer to enum?

本问题已经有最佳答案,请猛点这里访问。

下面我列举:P></

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public enum detallistaDocumentStatus {

    /// <remarks/>
    ORIGINAL,

    /// <remarks/>
    COPY,

    /// <remarks/>
    REEMPLAZA,

    /// <remarks/>
    DELETE,
}

然后我在detallistadocumentstatus property of type class:P></

1
2
3
4
5
6
7
8
 public detallistaDocumentStatus documentStatus {
        get {
            return this.documentStatusField;
        }
        set {
            this.documentStatusField = value;
        }
    }

生活会在the user send the real number(美国在1,2,3或4)在每个枚举值representing a declared they are the Order。P></

我知道,可能是它的演员吗?P></

1
det.documentStatus = (detallistaDocumentStatus)3;

if not how the,我让安安枚举值使用整数作为索引使用的很多,我们是我们想知道的枚举,do something GENERIC和可重复使用P></


是的,可以将ENUM强制转换为int,反之亦然,因为每个ENUM实际上都由每个违约的int表示。您应该手动指定成员值。默认情况下,它从0到N开始。

也可以将ENUM铸造成string,反之亦然。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public enum MyEnum
{
    Value1 = 1,
    Value2 = 2,
    Value3 = 3
}

private static void Main(string[] args)
{
    int enumAsInt = (int)MyEnum.Value2; //enumAsInt == 2

    int myValueToCast = 3;
    string myValueAsString ="Value1";
    MyEnum myValueAsEnum = (MyEnum)myValueToCast;   // Will be Value3

    MyEnum myValueAsEnumFromString;
    if (Enum.TryParse<MyEnum>(myValueAsString, out myValueAsEnumFromString))
    {
        // Put logic here
        // myValueAsEnumFromString will be Value1
    }

    Console.ReadLine();
}


是的,这是可能的。我用下面的EDOCX1[0]

1
2
3
4
5
public enum AccountTypes
{
  Proposed = 1,
  Open = 2
}

然后当我调用它时,我使用这个来获取值:

1
(int)AccountTypes.Open

它将返回我需要的int值,上面的值将是2。


根据C 4.0规范:

1.10 Enums

Enum values can be converted to integral values and vice versa using
type casts. For example

1
2
int i = (int)Color.Blue;      // int i = 2;
Color c = (Color)2;               // Color c = Color.Blue;

需要注意的另一件事是,允许您在枚举的基础类型的范围内(默认情况下为in t)强制转换任何整数值,即使该值未映射到枚举声明中的某个名称。从1.10枚举:

The set of values that an enum type can take on is not limited by its
enum members. In particular, any value of the underlying type of an
enum can be cast to the enum type and is a distinct valid value of
that enum type.

因此,在您的示例中,枚举也允许使用以下内容:

1
det.documentStatus = (detallistaDocumentStatus) 42;

即使没有值为42的枚举名称。


如果为枚举成员提供显式整数值,例如:

1
2
3
4
5
6
7
public enum Foo
{
    Five=5
    , Six
    , Seven
    , Eight
}

您只需将它们强制转换到int中,就可以得到隐式值。

1
var bar = (int)Foo.Six: /// bar == 6

如果您没有为至少第一个显式定义一个值,那么将它强制转换为in t将给出它在声明中出现的顺序。


1
det.documentStatus = (detallistaDocumentStatus)3;

以上工作应该可以。这里要记住的唯一一件事是,如果要为枚举成员分配特定的数字,那么类似这样的事情可能无法按预期工作。另外,如果没有显式地对枚举值进行编号,则枚举成员将从零索引开始。

因此,上面的代码将按照声明的顺序分配枚举的第4个成员。

若要检查给定整数是否为该枚举的有效枚举值,请使用Enum.IsDefined


枚举只是一种方便的命名整数的方法。枚举值的加、减和比较方法与int的方法相同。