2017-09-15 65 views
-2

使用「最佳方式」我的意思是,也許沒有多少如果幹淨的代碼。根據行動將字符串分組的最佳方法

我有一個函數接收作爲參數(字符串currentVersion,字符串行動) 它應該返回一個字符串versionToBe =「」;

對於行動= 「installOldVersion」

-------------如果 「CURRENTVERSION」 ----------------: - ----------- OldversionToInstall --------------

  • 「windows10(pro)」,「windows10(pro)(education)」:「 windows81(pro)「
  • 」windows10(enterprise)「,」windows10(enterpise)(lstb)「:」windows81(enterprise)「
  • 」windows7(home)「,」windows7(home)(basic)「 ,「windows7(basic)」,「windows7」:「windowsVista(starter)」
  • 「windowsXP(starter)」,「windowsXP(starter)(home)」,「windowsXP(home)」,「windowsXP」:「windows2000(professional)」
  • 「windowsNT(workstation)」,「windowsNT」: 「WINDOWS95(SP1)」

對於行動= 「installNewVersion」

-------------如果 「CURRENTVERSION」 ----------- -----:------------- NewVersionToInstall --------------

  • 「windows81(pro)」,「windows81(親)(教育)「:」windows10(親)「
  • 「windows81(企業)」,「windows81(企業)(教育)」:「windows10(企業)」
  • 「windowsVista(starter)」,「windowsVista(starter)(package)」,「windowsVista )「,」windowsVista「:」windows7(home)「
  • 」windowsVista(starter)「,」windowsVista(starter)(praok)「,」windowsVista(praok)「,」windowsVista「:」windowsXP(starter)「
  • 「WINDOWS95(SP1)」, 「WINDOWS95(SP1)(versionE)」, 「WINDOWS95」: 「WINDOWSNT(工作站)」

因此,舉例來說,每次字符串名稱來像:「windows10 (親)「或」windows10(親)(教育)「它應該返回:「windows81(pro)」。

我知道這與許多得到做,如果這樣的:

if (version.Equals("windows10(pro)") || version.Equals("windows10(pro)(education)")) 
      { 
       versionToBe = "windows81(pro)"; 
      } 

與同爲他們的休息,安定與10如果總語句。

但是,如果有更好的方法來做到這一點,我想知道。

另一個限制,或其他的事情要考慮:

  • 如果動作是 「installOldVersion」,versionToBe是OldversionToInstall, 如果操作是 「installNewVersion」,versionTobe會NewVersionToInstall。

回答

0

您可以使用CurrentVersion,Old Version和New Version創建對象列表,然後從列表中提取所需的對象。

舉例說明類的定義

public class VersionInformation 
{ 
    public string CurrentVersion {get; set;} 
    public string NewVersion {get; set;} 
    public string OldVersion {get; set;} 
} 

然後在你的程序,讓他們的名單,無論是硬編碼或從文件或任何數據存儲你想要做你的版本檢查裝載如下:

private List<VersionInformation> _versionInformation = //Load your list from wherever; 

public void DoVersionCheck(string version) 
{ 
    var currentversionInfo = _versionInformation.Single(x=> x.CurrentVersion == version); 

    //Do Whatever you want with the upgrades and downgrades here based on whatever action you are doing 
} 
0

設置自己的字典並執行查找。

作爲練習讀者:

  • 你可以從一些配置或其他甚至從一個數據庫驅動的詞典內容......如果你想。
  • 你大概想要將你的字典設置爲一個靜態的並且只初始化它一次。
  • 當您沒有字典條目時,您將需要進行一些處理 - 您沒有在問題中指定默認值。

    字典,字符串> ActionMatrix =新字典,字符串>(); (「windows10(pro)」,「installOldVersion」),「windows81(pro)」); (「windows10(pro)(education)」,「installOldVersion」),「windows81(pro)」); (「windows10(enterprise)」​​,「installOldVersion」),「windows81(enterprise)」​​); (「windows10(enterpise)(lstb)」,「installOldVersion」),「windows81(enterprise)」​​);

    //等

    ActionMatrix.Add(Tuple.Create( 「windows81(PRO)」, 「installNewVersion」), 「windows10(PRO)」); (「windows81(pro)(education)」,「installNewVersion」),「windows10(pro)」); (「windows81(enterprise)」​​,「installNewVersion」),「windows10(enterprise)」​​); (「windows10(enterpise)(education)」,「installNewVersion」),「windows10(enterprise)」​​);

    //等

    公共字符串VersionToBe(串CURRENTVERSION,串動作) { 返回ActionMatrix [Tuple.Create(CURRENTVERSION,動作)]; }

0

一個簡單的對象與它自己的列表應該做的伎倆,並在視覺上更好地遵循。

public class VersionData 
    { 
     private static List<VersionData> VersionDatas { get; set; } = new List<VersionData>() 
     { 
      new VersionData("OldversionToInstall", new [] {"windows10(pro)", "windows10(pro)(education)" }.ToList(), "windows81(pro)"), 
      new VersionData("OldversionToInstall", new [] {"windows10(enterprise)", "windows10(enterpise)(lstb)" }.ToList(), "windows81(enterprise)") 
     }; 

     public string Action { get; set; } = ""; 
     public List<string> CurrentVersions { get; set; } = new List<string>(); 
     public string Version { get; set; } = ""; 

     public VersionData(string action, List<string> currentVersions, string version) 
     { 
      Action = action; 
      CurrentVersions = currentVersions; 
      Version = version; 
     } 

     public static string GetVersion(string action, string currentVersion) 
     { 
      return VersionDatas.FirstOrDefault(o => o.Action == action && o.CurrentVersions.Any(x => x == currentVersion)).Version; 
     } 
    } 

,並調用它的那樣簡單:

var oldVersion = VersionData.GetVersion("OldversionToInstall", "windows10(enterpise)(lstb)"); 
相關問題