switch со статистическими константами
Допустим, по какой-то причине я не хочу использовать enum'ы и для этого делаю статические поля с константными значениями:
class Priority
{
public static Priority Low = new Priority(1, "Низкий");
public static Priority Normal { get; } = new Priority(2, "Средний");
public static Priority High { get; } = new Priority(3, "Высокий");
public int Id { get; }
public string Discription { get; }
protected Priority(int id, string discription)
{
Id = id;
Discription = discription;
}
}
Проблема в том, что я не могу в этом случае использовать switch... Если я помечу поле, как const, то будет ругань на оператор new...
Если какая-нибудь хитрая конструкция языка, которая позволит мне сделать задуманное?
Да, можно через if'ы сделать, но они чуть массивные по сравнению со switch...
Ответы (1 шт):
Switch требует для проверки постоянное выражение. Предоставьте ему это, если уж так надо Switch (но свичи это плохая идея для чистого кода). При желании если правильно помню, можно организовать enum из которого можно вытаскивать int значение выбранного элемента (в случаях когда для БД требуется int.
public enum EnumIdPriority : int
{
Low = 1,
Normal = 2,
High = 3
}
public class Priority
{
public static Priority Low { get; } = new Priority(EnumIdPriority.Low, "Низкий");
public static Priority Normal { get; } = new Priority(EnumIdPriority.Normal, "Средний");
public static Priority High { get; } = new Priority(EnumIdPriority.High, "Высокий");
public EnumIdPriority Id { get; }
public string Discription { get; }
internal Priority(EnumIdPriority id, string discription)
{
Id = id;
Discription = discription;
}
}
class SwitchPriority
{
public void main()
{
Priority _Priority = new Priority(0, "sdasd");
switch (_Priority.Id)
{
// Low
case EnumIdPriority.Low:
break;
// Normal
case EnumIdPriority.Normal:
break;
// High
case EnumIdPriority.High:
break;
default:
break;
}
}
}