2013-03-02 3 views
2

Можно ли определить, какой случай в настоящее время оценивается? Что-то вроде этого примера кода:Как определить текущий случай в инструкции switch?

const int one = 1; 
const int two = 2; 

int current_num = 1; 

switch (current_num){ 
     case one: 
     case two: 
      WriteLine(current_case) //outputs 'one' 
      break; 
} 

Я считаю, что я мог бы получить сложно, и использовать словарь или что-то, чтобы посмотреть на current_num когда я начал WriteLine, но может быть встроенный способ, чтобы получить имя текущего оцениваемого события.

Редактировать: Короткий ответ, это невозможно. Проверьте ответ JonSkeet на правдоподобную альтернативу.

+1

Это недействительно C# для начала, поскольку выражения 'case' могут быть только константами. Я думаю, вы пытаетесь сделать что-то, чего на самом деле не существует ... –

+0

@JonSkeet: true, но если вы замените «один» на 1 и т. Д., Это все равно интересный вопрос imho. Хотя я очень сомневаюсь, что это возможно без использования какого-либо метода ткачества или другого постобработки. – Alxandr

+0

@Alxandr: Если вы замените «один» на 1, то почему бы просто не использовать 'WriteLine (current_num)'? На самом деле непонятно, чего пытается добиться OP - я опубликовал ответ, который * может * помочь, но мы могли бы действительно сделать с большей ясностью. –

ответ

5

Это не совсем понятно, что вы пытаетесь сделать, но я подозреваю, вы бы лучше с перечислением:

enum Foo { 
    One = 1, 
    Two = 2, 
    Three = 3 
} 

... 

int someValue = 2; 
Foo foo = (Foo) someValue; 
Console.WriteLine(foo); // Two 

Вы все еще можете использовать это в случае заявления:

switch (foo) { 
    case Foo.One: 
    case Foo.Two: 
     Console.WriteLine(foo); // One or Two, depending on foo 
     break; 
    default: 
     Console.WriteLine("Not One or Two"); 
} 
Смежные вопросы