我正在尝试重构此代码,我想要创建一个包含值的字典,但我不确定。
String version "1.0";
if (version.Equals("1.0.0(beta)") || version.Equals("1.0.0(beta2)") || version.Equals("1.0.0(beta3)") || version.Equals("1.0.0"))
{
newVersion= executionType.Equals("Install") ? "2.0.0(beta)" : "1.0.0(beta)";
}
else if(version.Equals("3.0.0(beta)") || version.Equals("3.0.0(beta2)") || version.Equals("3.0.0(beta3)") || version.Equals("3.0.0"))
{
newVersion= executionType.Equals("Install") ? "4.0.0(beta)" : "3.0.0(beta)";
}
else if (version.Equals("5.0.0(beta)") || version.Equals("5.0.0(beta2)") || version.Equals("5.0.0(beta3)") || version.Equals("5.0.0" || version.Equals("5.0.0.b"))
{
newVersion= executionType.Equals("Install") ? "6.0.0(beta)" : "5.0.0(beta)";
}
else if(same){
newVersion = same;
像其他7个总计。 我必须使用.NET 2.0执行此操作。
答案 0 :(得分:2)
对于.NET2.0,我担心你必须坚持使用switch
:
switch(version)
{
case "1.0.0(beta)":
case "1.0.0(beta2)":
case "1.0.0(beta3)":
case "1.0.0":
newVersion = executionType.Equals("Install") ? "2.0.0(beta)" : "1.0.0(beta)";
break;
case "3.0.0(beta)":
case "3.0.0(beta2)":
case "3.0.0(beta3)":
case "3.0.0":
newVersion= executionType.Equals("Install") ? "4.0.0(beta)" : "3.0.0(beta)";
break;
case "5.0.0(beta)":
case "5.0.0(beta2)":
case "5.0.0(beta3)":
case "5.0.0":
case "5.0.0.b":
newVersion= executionType.Equals("Install") ? "6.0.0(beta)" : "5.0.0(beta)";
break;
}
但现在看到这些“案例”你可以更好地看到相似之处。我不知道你的其他值,但这些情况看起来你可以试试这个:
switch(version.SubString(0, 5)) // only test first 5 characters
{
case "1.0.0":
newVersion = executionType.Equals("Install") ? "2.0.0(beta)" : "1.0.0(beta)";
break;
case "3.0.0":
newVersion= executionType.Equals("Install") ? "4.0.0(beta)" : "3.0.0(beta)";
break;
case "5.0.0":
newVersion= executionType.Equals("Install") ? "6.0.0(beta)" : "5.0.0(beta)";
break;
}
因此确实使用了两个词典:
Dictionary<string, string> versionsForInstall = new Dictionary<string, string>
{
{"1.0.0", "2.0.0(beta)"},
{"3.0.0", "4.0.0(beta)"},
{"5.0.0", "6.0.0(beta)"}
};
Dictionary<string, string> versionsForOther = new Dictionary<string, string>
{
{"1.0.0", "1.0.0(beta)"},
{"3.0.0", "3.0.0(beta)"},
{"5.0.0", "5.0.0(beta)"}
};
然后再做
newVersion = executionType.Equals("Install")
? versionsForInstall[version.SubString(0,5)]
: versionsForOther[version.SubString(0,5)];
答案 1 :(得分:0)
这里可以做很多重构,但我要采取的第一步是关注所有的||运营商。如果我看到多个(有时甚至有人推动它)||或者&amp;&amp;在评估中,它闻起来像会吸引维护混乱和后来的错误。我会发现它更容易阅读:
if(IsV1Variant(version))
{
...
}
else if(IsV2Variant(version))
{
...
}
在这种情况下,它看起来像StartsWith比较可以简化逻辑并降低价值不会从裂缝中掉落的风险
答案 2 :(得分:0)
使用与此类似的开关
switch (version)
{
case "1.0.0(beta)":
case "1.0.0(beta2)":
case "1.0.0(beta3)":
case "1.0.0(beta)":
newVersion= executionType.Equals("Install") ? "2.0.0(beta)" : "1.0.0(beta)";
break;
case "3.0.0(beta)":
case "3.0.0(beta2)":
case "3.0.0(beta3)":
case "3.0.0":
newVersion= executionType.Equals("Install") ? "4.0.0(beta)" : "3.0.0(beta)";
break;
case "5.0.0(beta)":
case "5.0.0(beta2)":
case "5.0.0":
case "5.0.0.b":
newVersion= executionType.Equals("Install") ? "6.0.0(beta)" : "5.0.0(beta)";
break;
}
不要害怕写很多行。 CLS将优化您的代码!