我继承了一个用C#编写的在线测验应用程序,这些代码行遍布整个地方.
那么这段代码有多糟糕?
我可能遇到的潜在问题是什么?
我怎么能改进它?
strTestPasses += "<tr valign=\"top\"><td><b>Subject</b></td><td>" + ((Hashtable)((ArrayList)((Hashtable)MultipleTestPasses[i])["HasMultipleDataSet"])[j])["subject"] + "</td></tr>";
Run Code Online (Sandbox Code Playgroud)
Noe*_*edy 14
我也讨厌这些"代码行".当人们问我'你做过的最大项目是什么'时,我会说'1行代码'.当其他人向我挑战时,"你每天能写多少行代码?",我回复他们说,'只有一个我的兄弟.但这是一条真正的路线'
要开始重构,我可以建议:
TestPassesBuilder.AppendFormat(
"<tr valign='top'><td><b>Subject</b></td><td>{0}</td></tr>",
MultipleTestPasses[i]["HasMultipleDataSet"][j]["subject"]
);
Run Code Online (Sandbox Code Playgroud)
要么
TestPassesBuilder.AppendFormat(
"<tr valign='top'><td><b>{0}</b></td><td>{1}</td></tr>",
"Subject",
MultipleTestPasses[i]["HasMultipleDataSet"][j]["subject"]
);
Run Code Online (Sandbox Code Playgroud)
TestPassesBuilder当然,StringBuilder 在哪里MultipleTestPasses被转换为使用适当的泛型集合类型而不是ArrayList/HashTable可憎的.第二个选项还允许在某个时刻将每行的标题分解为变量.
对于下一步,MultipleTestPasses应转换为真实对象.由于看起来他正在使用硬编码键,因此每个"键"实际上对应于类的属性.
它通过了单元测试吗?