Это можно сделать с помощью сопоставления с образцом :
public class PlayerCurrencies
{
public SoftCurrency Soft = new SoftCurrency();
public HardCurrency Hard = new SoftCurrency();
public EventCurrency Event = new EventCurrency();
public Currency GetCurrencyFromType(Currency currency)
{
switch (currency)
{
case EventCurrency: return Event;
case HardCurrency: return Hard;
case SoftCurrency: return Soft;
}
return null;
}
}
Я изменил имена полей на Hard
, Soft
и Event
, чтобы их было легче различить guish их из типов с одинаковыми именами.
В этом конкретном примере кажется странным передавать параметр currency
и использовать его только для своего типа. Там может быть другой способ решить вашу конкретную проблему c. Но что касается того, как сделать это без нескольких операторов if
, это то, как вы можете это сделать.
Чаще всего это будет продемонстрировано с объявленными переменными следующим образом:
switch (currency)
{
case EventCurrency ec : return Event;
case HardCurrency hc: return Hard;
case SoftCurrency sc: return Soft;
}
return null;
Например, если тип currency
был EventCurrency
, то в области действия case
, ec
будет аргументом currency
, приведенным к EventCurrency
. Но поскольку в этом примере вы не используете значение, переменные не нужны.