C# 有没有一种方法可以通过使用字典和其他代码用操作替换switch语句?
以下是我的应用程序的功能:C# 有没有一种方法可以通过使用字典和其他代码用操作替换switch语句?,c#,C#,以下是我的应用程序的功能: private void saveInDatabase(string key, string value) switch (key) { case "a": def = Helpers.Utils.listOfDoubleFromString(value); break; case "b": chi = int.Parse(value); break;
private void saveInDatabase(string key, string value)
switch (key)
{
case "a":
def = Helpers.Utils.listOfDoubleFromString(value);
break;
case "b":
chi = int.Parse(value);
break;
....
}
有没有一种方法可以让我使用这样的字典来决定在不同的case值下会发生什么操作
{"a", () => def = Helpers.Utils.listOfDoubleFromString(value)},
{"b", () => chi = int.Parse(value)},
我的应用程序中有大量这样的案例陈述,因此我很想知道是否可以通过设置字典和更多代码来替换它们。我的意思是,你基本上明白了:
string def;
int chi;
var map = new Dictionary<string, Action<string>>
{
["a"] = value => def = Helpers.Utils.listOfDoubleFromString(value),
["b"] = value => chi = int.Parse(value),
};
map[key](value);
字符串定义;
林芝;
var-map=新字典
{
[“a”]=value=>def=Helpers.Utils.listOfDoubleFromString(值),
[“b”]=value=>chi=int.Parse(value),
};
映射[键](值);
可以将键映射到Func,但如何知道返回类型<代码>dict[键](值)代码>抱歉,我在尝试映射时出错。我需要回到不同的东西,比如def或chi。当你建立字典时,def和chi是可用的?这是一个纯粹的C#问题,与Xamarin无关。询问者想要什么还不太清楚。您可以让lambda捕获在“包含范围”中定义的def
和chi
,但不捕获值。根据值
是什么,它也可能被捕获,然后您将使用操作
而不是操作
。如果使用您的方法,可以将lambda中的字符串参数重命名为justv
,但在最后一行的调用中保留value
。@Blindy-这可以更改为Dictionary吗?我不需要捕获任何值。@Alan2,但如果您将其作为操作
,则必须捕获值
;您还可以如何使用它?@Alan2,如您所愿,如果value
是一个字段,那么它可以被套用而不是显式发送。这些细节在实际代码示例中变得更加清晰,而不是从应用程序代码中复制int.Parse
.Helpers.Utils.listOfDoubleFromString(value)和intParse(value)。变量名def和chi只是较长变量名的简短版本,如App.CM.Selectedconf.newChi.delays。值是传递到开关出现的方法中的参数。