Подтвердить что ты не робот

Можно ли отличать целое число с перечислением?

Возможный дубликат:
Вставить int в Enum в С#

Я получил следующее перечисление:

 public enum detallistaDocumentStatus {

    /// <remarks/>
    ORIGINAL,

    /// <remarks/>
    COPY,

    /// <remarks/>
    REEMPLAZA,

    /// <remarks/>
    DELETE,
}

тогда я получил свойство класса типа detallistaDocumentStatus:

 public detallistaDocumentStatus documentStatus {
        get {
            return this.documentStatusField;
        }
        set {
            this.documentStatusField = value;
        }
    }

В реальной жизни пользователь отправит нам число (1, 2, 3 или 4), представляющее каждое значение перечисления в том порядке, в котором они объявлены.

Итак, можно ли это сделать так?

det.documentStatus = (detallistaDocumentStatus)3;

Если нет, как я могу получить значение перечисления с использованием целого числа в качестве индекса, мы используем много перечислений, поэтому мы хотим сделать что-то общее и многоразовое

4b9b3361

Ответ 1

Да, возможно отбрасывать Enum в int и наоборот, потому что каждый Enum фактически представлен int по умолчанию. Вы должны вручную указать значения элементов. По умолчанию он начинается от 0 до N.

Также возможно отбрасывать Enum до string и наоборот.

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();
}

Ответ 2

Да, это возможно. Я использую следующие ENUM

public enum AccountTypes
{
  Proposed = 1,
  Open = 2
}

то, когда я его вызываю, я использую это, чтобы получить значение:

(int)AccountTypes.Open

И он вернет значение int, которое мне нужно, для указанного выше будет 2.

Ответ 3

Из спецификации С# 4.0:

1.10 Перечисления

Значения Enum могут быть преобразованы в целые значения и наоборот, используя типа. Например

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

Еще одна вещь, о которой нужно помнить, заключается в том, что вам разрешено использовать какое-либо целочисленное значение в диапазоне базового типа enum (по умолчанию это int), даже если это значение не сопоставляется с одним из имен в enum. От 1.10. Перечисления:

Набор значений, которые может принимать тип перечисления, не ограничен его перечислять членов. В частности, любое значение базового типа enum может быть перенесено в тип перечисления и является отдельным действительным значением этот тип перечисления.

Таким образом, в вашем примере разрешено также перечисление:

det.documentStatus = (detallistaDocumentStatus) 42;

даже если нет имени перечислимого типа, имеющего значение 42.

Ответ 4

det.documentStatus = (detallistaDocumentStatus)3;

Вышеуказанное должно работать нормально. Единственное, что следует помнить здесь, это то, что вы назначаете определенные числа для перечисляющих членов, тогда что-то вроде этого может работать не так, как ожидалось. Кроме того, если вы явно не перечисляете свои значения перечисления, члены перечисления начинаются с индекса на основе нуля.

Таким образом, указанный выше код присваивает 4-му члену перечисления в порядке объявления.

Чтобы проверить, является ли данное целое число действительным значением перечисления для этого перечисления, используйте Enum.IsDefined

Ответ 5

Если вы даете явное целочисленное значение для ваших членов перечисления, например:

public enum Foo
{
    Five=5
    , Six
    , Seven
    , Eight
}

Вы можете просто передать их в int, чтобы получить неявное значение.

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

Если вы явно не определяете значение, по крайней мере, первого, то приведение его к int даст вам порядок, в котором он появляется в объявлении.

Ответ 6

ENUM - это просто удобный способ назвать целые числа. Значения ENUM могут быть добавлены, вычтены и сравнены так же, как и int.