То, что вы пытаетесь сделать, недоступно (пока) в C #, поскольку операторы switch нельзя однозначно оценить для одного возвращаемого значения.Причина этого заключается в том, что случаи переключения могут содержать любой произвольный код, а не только одно выражение.
Будет новый способ написания операторов переключения в C # 8, который сделает ваш код возможным.
Вы можете решить свою проблему, создав вспомогательный метод:
MailMessageTextPlaceholders = new List<MailMessageTextPlaceholder>
{
new MailMessageTextPlaceholder
{
PlaceholderName = "status",
Value = GetStatusDescription(_lockCard.Status)
}
}
string GetStatusDescription(LockCard.LockCardStatus status)
{
switch (status)
{
case (int)LockCard.LockCardStatus.Done :
return "Is Done";
case (int)LockCard.LockCardStatus.Pending :
return "Is in Pending status";
case (int)LockCard.LockCardStatus.Open :
return "Has been created";
default:
return "No status yet!";
}
}
, а вспомогательный метод может быть локальной функцией
Если вы по-прежнемудействительно, очень желая встроить ваше отображение строк, вы можете вложить операторы троичного оператора.
MailMessageTextPlaceholders = new List<MailMessageTextPlaceholder>
{
new MailMessageTextPlaceholder
{
PlaceholderName = "status",
Value =
status == LockCard.LockCardStatus.Done
? "Is Done";
: status == LockCard.LockCardStatus.Pending
? "Is in Pending status"
: status == LockCard.LockCardStatus.Open
? "Has been created"
: "No status yet!";
}
}
Когда вы используете троичные операторы, C # сможет однозначно оценить результат, что делает компилятор счастливым.
Вы также можете решить свою проблему, добавив атрибуты описания к вашему enum