C# 这个代码有多糟糕?
我继承了一个用C#编写的在线测验应用程序,上面到处都是这些代码行 那么这个代码有多糟糕 我可能遇到哪些潜在问题 我怎样才能改进它 守则:C# 这个代码有多糟糕?,c#,coding-style,C#,Coding Style,我继承了一个用C#编写的在线测验应用程序,上面到处都是这些代码行 那么这个代码有多糟糕 我可能遇到哪些潜在问题 我怎样才能改进它 守则: strTestPasses+=“Subject”+((Hashtable)((ArrayList)((Hashtable)MultipleTestPasses[i])[“HasMultipleDataSet”])[j])[“Subject”]+”; 好吧,主观上,我会说它像罪一样丑陋。好吧,主观上,我会说它像罪一样丑陋。它不伟大,但我见过更糟的 为了不惊吓任何
strTestPasses+=“Subject”+((Hashtable)((ArrayList)((Hashtable)MultipleTestPasses[i])[“HasMultipleDataSet”])[j])[“Subject”]+”;
好吧,主观上,我会说它像罪一样丑陋。好吧,主观上,我会说它像罪一样丑陋。它不伟大,但我见过更糟的
为了不惊吓任何人陷入昏迷或其他不愉快的事件,我将不发表任何例子。这不太好,但我看到了更糟的情况
为了不让任何人陷入昏迷或其他不愉快的事件,我将不发表任何例子。它通过了单元测试吗?它通过了单元测试吗?HTML结束了eww。HTML结束了eww。作为对一个主观问题的主观回答,它并不漂亮。再说一次,如果这是一个小网站,那么用“快速而肮脏”的方式做这件事可能会更容易,然后用更合适的方式,例如,C#/ASP->XML->XSLT->HTML(或者类似的东西——我在这里抓住了一点稻草)同样,作为一个主观问题的主观答案,它并不漂亮。再说一次,如果这是一个小网站,那么用“快速而肮脏”的方式做这件事可能比用更合适的方式更容易,例如,C#/ASP->XML->XSLT->HTML(或者类似的东西——我这里有点抓稻草)我也讨厌这些“代码行”。当人们问我“你做过的最大的项目是什么”时,我会说“一行代码”。当其他人这样问我“你一天能写多少行代码?”时,我对他们说,“只有一行,我的兄弟。”。但这是真正的一行“我也讨厌这些“代码行”。当人们问我“你做过的最大的项目是什么”时,我会说“一行代码”。当其他人这样问我“你一天能写多少行代码?”时,我对他们说,“只有一行,我的兄弟。”。但这是一条真正的路线,其实没那么糟。显然,程序员并没有期望有人会接管他的项目(缺乏专业经验),但将这些通用哈希表和数组列表重构成更有意义的东西并不难 同样在重构时,对html使用带@的字符串文本
我个人不在乎他是否在使用html模板,如果这是一个小项目的话。模板通常是用于小项目的,但效果太好了。实际上并没有那么糟糕。显然,程序员并没有期望有人会接管他的项目(缺乏专业经验),但将这些通用哈希表和数组列表重构成更有意义的东西并不难 同样在重构时,对html使用带@的字符串文本 我个人不在乎他是否在使用html模板,如果这是一个小项目的话。模板通常是用于小项目的。你知道他们怎么说“…只有母亲才能爱…” 嗯,在这种情况下,只有编译器才能爱。你知道人们怎么说“…只有母亲才能爱…”
那么,在这种情况下,只有编译器才会喜欢。要开始重构,我建议:
TestPassesBuilder.AppendFormat(
"<tr valign='top'><td><b>Subject</b></td><td>{0}</td></tr>",
MultipleTestPasses[i]["HasMultipleDataSet"][j]["subject"]
);
TestPassesBuilder.AppendFormat(
“主题{0}”,
多重访问[i][“HasMultipleDataSet”][j][“subject”]
);
或
TestPassesBuilder.AppendFormat(
"{0}{1}",
“主题”,
多重访问[i][“HasMultipleDataSet”][j][“subject”]
);
其中,TestPassesBuilder
当然是一个StringBuilder,MultipleTestPasses
已经转换为使用适当的泛型集合类型,而不是ArrayList/HashTable。第二个选项还允许在某个点将每行的标题分解为变量
对于下一步,应该将多个路径转换为真实对象。因为看起来他使用的是硬编码键,所以每个“键”实际上都对应于一个类的属性。要开始重构,我建议:
TestPassesBuilder.AppendFormat(
"<tr valign='top'><td><b>Subject</b></td><td>{0}</td></tr>",
MultipleTestPasses[i]["HasMultipleDataSet"][j]["subject"]
);
TestPassesBuilder.AppendFormat(
“主题{0}”,
多重访问[i][“HasMultipleDataSet”][j][“subject”]
);
或
TestPassesBuilder.AppendFormat(
"{0}{1}",
“主题”,
多重访问[i][“HasMultipleDataSet”][j][“subject”]
);
其中,TestPassesBuilder
当然是一个StringBuilder,MultipleTestPasses
已经转换为使用适当的泛型集合类型,而不是ArrayList/HashTable。第二个选项还允许在某个点将每行的标题分解为变量
对于下一步,应该将多个路径转换为真实对象。因为看起来他使用的是硬编码键,所以每个“键”实际上都对应于一个类的属性。在不知道代码库的大小和范围的情况下,我发现这行代码中有两件事让我非常困扰
strTestPassesStringBuilder.Append(newTableRow("Subject", getSubject());
如果和valign选项是通过CSS控制的。在不知道代码库的大小和范围的情况下,我发现这行代码中有两件事让我非常困扰
strTestPassesStringBuilder.Append(newTableRow("Subject", getSubject());
其中,和valign选项通过CSS控制
哦。。。我的眼睛
哦。。。我的眼睛…这非常糟糕,因为它包含以下缺陷:
- 字符串连接,而StringBuilder或
((Hashtable)((ArrayList)((Hashtable)MultipleTestPasses[i])["HasMultipleDataSet"])[j])["subject"]