Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有一种方法可以通过使用字典和其他代码用操作替换switch语句?_C# - Fatal编程技术网

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中的字符串参数重命名为just
v
,但在最后一行的调用中保留
value
。@Blindy-这可以更改为Dictionary吗?我不需要捕获任何值。@Alan2,但如果您将其作为
操作
,则必须捕获
;您还可以如何使用它?@Alan2,如您所愿,如果
value
是一个字段,那么它可以被套用而不是显式发送。这些细节在实际代码示例中变得更加清晰,而不是从应用程序代码中复制
int.Parse
.Helpers.Utils.listOfDoubleFromString(value)和intParse(value)。变量名def和chi只是较长变量名的简短版本,如App.CM.Selectedconf.newChi.delays。值是传递到开关出现的方法中的参数。