需要帮助来改进现有的代码段

thi*_*-Me 0 c#

我已经编写了一个代码片段,我肯定觉得它写得不正确.我的方法必须根据我机器中Adobe Installed的版本返回一个字符串.

private string GetRegistryKeyPathForX()
        {
            string sPath = string.Empty;
            RegistryKey adobe = Registry.CurrentUser.OpenSubKey("Software").OpenSubKey("Adobe");
            if (adobe != null)
            {
                RegistryKey acroRead = adobe.OpenSubKey("Adobe Acrobat");
                if (acroRead != null)
                {
                    string[] acroReadVersions = acroRead.GetSubKeyNames();
                    //The following version(s) of Acrobat Reader are installed
                    foreach (string versionNumber in acroReadVersions)
                    {
                        switch(versionNumber)
                        {
                            case "6.0": sPath = "Software\\Adobe\\Acrobat Reader";
                                        return sPath;  //Improve here
                                        break;

                            case "7.0":
                                        sPath = "";
                                        return sPath;   //Improve here
                                        break;
                            case "8.0": 
                                        sPath = "";
                                        return sPath;   //Improve here
                                        break;
                            case "9.0" :
                                        sPath = "Software\\Adobe\\Acrobat Reader";
                                        return sPath;   //Improve here
                                        break;
                            default: sPath = "ERR_KEY";
                                            break;
                        }  
                    }
                }
            }
        return sPath;
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法让我可以一次性返回字符串,而不是在每个case语句中分配它.

SWe*_*eko 6

如果你只是优化开关,你可以写:

switch(versionNumber)
{
   case "6.0": 
   case "9.0": 
      return "Software\\Adobe\\Acrobat Reader";
  case "7.0":
  case "8.0": 
      return string.Empty;
  default: 
      return "ERR_KEY";
}
Run Code Online (Sandbox Code Playgroud)

但是,我更喜欢使用map而不是switch(特别是如果你需要在多个地方使用这个逻辑),所以你可以这样做:

Dictionary<string, string> versionPaths = new Dictionary<string, string>();
versionPaths.Add("6.0","Software\\Adobe\\Acrobat Reader");
versionPaths.Add("7.0",string.empty);
....
if (versionPaths.ContainsKey(versionNumber))
  return versionPaths[versionNumber];
else
  return "ERR_KEY";
Run Code Online (Sandbox Code Playgroud)