2015-08-17 2 views
2

По какой-то причине HttpResponseMessageProperty, который я использую для возврата определенных кодов ответа HTTP клиенту, использует перечисление HttpStatusCode. Это перечисление не включает 422, которое не включено в перечисление. Есть ли способ установить перечисление с использованием целого числа, поскольку это то, что находится под обложками?Возможно ли в .Net установить целочисленное перечисление на произвольное значение

+0

Да, просто введите целочисленное значение, например: 'HttpStatusCode code = (HttpStatusCode) 422;' Нет гарантий относительно того, как это может негативно повлиять на вашу программу. (например, возможно, есть где-то проверка/проверка/логика, которая ожидает, что она будет одним из значений именованного имени) –

ответ

6

Да, это возможно, - внутренне enum значения просто integer, и вы можете «заставить» значение перечисления иметь недопустимое значение, и CLR будет продолжать свое веселье.

, например:

enum Foo { 
    Bar = 1, 
    Baz = 2 
} 

void Test() { 
    Foo foo; // as Foo is a value-type and no initial value is set, its value is zero. 
    Console.WriteLine(foo); // will output "0" even though there is no enum member defined for that value 

    Foo foo2 = (Foo)200; 
    Console.WriteLine(foo2); // will output "200" 
} 

Вот почему, при работе со значениями перечислений неизвестного происхождения, вы всегда должны обрабатывать default дело и обрабатывать соответствующим образом:

public void DoSomethingWithEnum(Foo value) { 
    switch(value) { 
     case Foo.Bar: 
      // do something 
      break; 
     case Foo.Baz: 
      // do something else 
      break; 
     default: 
      // I like to throw this exception in this circumstance: 
      throw new InvalidEnumArgumentException("value", (int)value, typeof(Foo)); 
    } 
} 
+0

Помимо точки, но поскольку вы упоминаете ее, 'throw new InvalidEnumArgumentException (значение« value », (int) typeof (Foo)); 'более полезно для отладки недопустимого значения перечисления. – sstan

2

Да, вы можете иметь любое значение, которое вы хотите (до тех пор, как она находится в диапазоне от базового типа ENUM в Wich Usally это целый):

HttpStatusCode value = (HttpStatusCode)422; 
3

Вы можете разыграть любое количество в перечисление, при условии, что перечисление имеет такую ​​же базовую структуру (обычно это int:

response.StatusCode = (HttpStatusCode)422; 
Смежные вопросы