我实际上正在使用此开关,并希望重构它,因为它可以根据我的应用程序的使用而显着增长。
switch (something)
{
case "emisores":
return await StampEmisor(id);
case "tipodocumento":
return await StampTipoDocumento(id);
case "plantillas":
return await StampPlantilla(id);
default:
return BadApiRequest("blabla was not found.");
}
我需要:
1.-返回值
2.-传递参数
3.-调用异步方法
我尝试了this solution,但这三个条件并未适用。我怎么能这样做?
非常感谢。
答案 0 :(得分:1)
要返回值(第一个要求),您必须将Action
内的Dictionary
转换为Function
:
new Dictionary<string, Func<>>()
由于这隐含地使其返回TResult
,您必须指定您将作为 Func
定义内的最后一个参数返回 ,并首先指定您传递的参数(第二项要求)。
最终进入
var stamps = new Dictionary<string, Func<Guid, Task<HttpResponseMessage>>>()
{
{ "emisores", new Func<Guid,Task<HttpResponseMessage>>(StampEmisor) },
{ "tipodocumento",new Func<Guid,Task<HttpResponseMessage>>(StampTipoDocumento)},
{ "plantillas", new Func<Guid,Task<HttpResponseMessage>>(StampPlantilla)},
{ "reglas", new Func<Guid, Task<HttpResponseMessage>>(StampRegla) }
};
现在,为了等待等待(第三个条件),只需使用.Invoke(id)
语句调用await
即可。在这种情况下,return await
因为我们想要返回提供的值:
if (stamps.ContainsKey(entity))
return await stamps[entity].Invoke(id);