Почему switch-case не позволяет использовать более одного nameof()
Есть команда:
public string Code { get; set; }
И есть конструкция
switch (A.Code)
{
case nameof(B.X.Code):
break;
case nameof(B.Y.Code):
break;
}
Без nameof() использовать case нельзя, т.к. строка public...
НО! При компиляции получаю ошибку:
Duplicate case label value ""Code""
Если же написать вообще без nameof():
switch (A.Code)
{
case B.X.Code:
break;
case B.Y.Code:
break;
}
То выдает ошибку:
A constant value is expected
Ответы (2 шт):
nameof - получает имя передаваемой параметром переменной, т.е. на выходе получается что-то типа:
switch (A.Code)
{
case "Code":
break;
case "Code":
break;
}
что, согласитесь, ерунда.
Поймите, чтобы использовать switch/case с типом string, вы должны знать что точно передаётся в это свойство. Например, в Code передаются 3 разных строки: abc, acb, bca (просто как пример). Тогда можно сделать так:
switch (A.Code)
{
case "abc":
break;
case "acb":
break;
case "bca":
break;
}
Если тип вашего свойства нельзя менять, то тогда вам надо написать столько кейсов, сколько значений будет принимать ваше свойство. Или написать парочку кейсов, а все остальные обрабатывать через default
Другой путь - это использовать enum.
Например
enum CodeType
{
Code1,
Code2,
Code3
}
А свойство у вас будет
public CodeType Code { get; set; }
И легко использовать в switch/case
switch (A.Code)
{
case CodeType.Code1:
break;
case CodeType.Code2:
break;
case CodeType.Code3:
break;
}