Вызов методов с разными параметрами с использованием карты вместо switch / if else - PullRequest
0 голосов
/ 22 мая 2018

Я работаю с методом ac #, который вызывает различные методы, основанные на некоторых условиях, и мне интересно, могу ли я сделать это без оператора switch или if else.Ниже приведен код, который у меня есть

if (msg== atype)
{
    _aHandler.HandleAType(msg, TopicType.A);
}
else if (msg== btype)
{
    _
    _btype.HandleBType(msg, TopicType.B);
}
else if (msg== ctype)
{
    _cHandler.HandleC(msg);
}
else if (msg== dtype)
{
    _dHandler.HandleDType(msg);
}

else
    _logger.Error($"No matching type found for {msg}");

Обратите внимание, что у меня есть разные методы с разными типами параметров в каждом условии.

Есть ли лучший способ, которым я могу сделать это безпереключатель / если-еще?

1 Ответ

0 голосов
/ 22 мая 2018

Вы имеете в виду что-то вроде этого:

var dic = new Dictionary<string, Action>
{
    {atype, () => _aHandler.HandleAType(atype, TopicType.A)},
    {btype, () => _btype.HandleBType(btype, TopicType.B)},
    {ctype, () => _cHandler.HandleC(ctype)},
    {dtype, () => _dHandler.HandleDType(dtype)}
};

//Call it
dic[msg]();
...