重构大的 if else 代码
我有很长的 if else 代码
if (errorNumbers.Length == 6)
{
if (errorNumbers.Substring(0,4).Equals("1101") || errorNumbers.Substring(0,4).Equals("2121"))
{
retStr = "AutoRepickAfterPickError";
}
else if (errorNumbers.Substring(0, 4).Equals("1301") || errorNumbers.Substring(0, 4).Equals("2321"))
{
retStr = "AutoRepickAfterLAlignError";
}
else if (errorNumbers.Substring(0, 4).Equals("1401") || errorNumbers.Substring(0, 4).Equals("2221"))
{
retStr = "AutoRepickAfterCAlignError";
}
else if (errorNumbers.Substring(0, 4).Equals("1501") || errorNumbers.Substring(0, 4).Equals("2041"))
{
retStr = "AutoRepicksAfterManualRecovery";
}
等......
我如何将其重写为更漂亮的东西。 试图在这里学习新的东西,我正在使用.net 2.0。 感谢您的帮助。
I have this really long if else code
if (errorNumbers.Length == 6)
{
if (errorNumbers.Substring(0,4).Equals("1101") || errorNumbers.Substring(0,4).Equals("2121"))
{
retStr = "AutoRepickAfterPickError";
}
else if (errorNumbers.Substring(0, 4).Equals("1301") || errorNumbers.Substring(0, 4).Equals("2321"))
{
retStr = "AutoRepickAfterLAlignError";
}
else if (errorNumbers.Substring(0, 4).Equals("1401") || errorNumbers.Substring(0, 4).Equals("2221"))
{
retStr = "AutoRepickAfterCAlignError";
}
else if (errorNumbers.Substring(0, 4).Equals("1501") || errorNumbers.Substring(0, 4).Equals("2041"))
{
retStr = "AutoRepicksAfterManualRecovery";
}
etc.....
How I can rewrite it to something more nice .
Trying to learn here something new , and I am in .net 2.0.
Thanks for help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我会将错误代码映射到字典中,如下所示:
I´d map the error codes in a dictionary like this:
这应该非常简单
另请注意,与 Java 不同,在 C# 中您可以使用
==
比较字符串。"123" == "456"
与"123".Equals("456")
执行相同的操作。That should be pretty straightforward
Also note that unlike in Java, in C# you can compare strings with
==
."123" == "456"
does the same thing as"123".Equals("456")
.首先,干燥原则 - 不要重复。将
errorNumbers.Substring(0, 4)
的结果分配给局部变量:支持特定值情况(不是范围):
您可以使用带有字符串的 switch 语句:
switch 语句的替代方法是创建字典:
范围:
如果您需要支持范围,则基本上必须坚持使用
if
/不过, else
块。还有其他选项,但如果代码中只有这么多类型的if
/else
块,它们往往会过于复杂。First off, DRY Principle - Don't Repeat Yourself. Assign the result of
errorNumbers.Substring(0, 4)
to a local variable:Support for specific value cases (not ranges):
You can use a switch statement with strings:
An alternative to a switch statement is creating a dictionary:
Ranges:
If you need to support ranges, you're basically going to have to stick with the
if
/else
blocks, though. There are other options, but they tend to be too convoluted if you only have so many of these types ofif
/else
blocks in your code.您应该使用 errorCode 和 errorMessage 之间的引用来初始化字典
您可以定义 GetErrorDescription 方法
You should initialize a dictionary with refferencies betwen errorCode and errorMessage
You can define GetErrorDescription method
首先,将
errorNumbers.Substring(0,4)
存储在长 if/else 之前的局部变量中。然后,您可以使用映射/字典消除整个 if/else,从预期的错误号到适当的返回字符串。
First, store
errorNumbers.Substring(0,4)
in a local variable before the long if/else.Then, you can eliminate the whole if/else using a map / dictionary from the expected error numbers to the appropriate return strings.
你可以试试这个:
You could try this:
选择案例怎么样? :D
What about Select-Case? :D