这段代码有多糟糕?

Moh*_*med 1 c# coding-style

我继承了一个用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行代码'.当其他人向我挑战时,"你每天能写多少行代码?",我回复他们说,'只有一个我的兄弟.但这是一条真正的路线'


Joe*_*orn 8

要开始重构,我可以建议:

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应转换为真实对象.由于看起来他正在使用硬编码键,因此每个"键"实际上对应于类的属性.


Dar*_*ter 7

它通过了单元测试吗?

  • 对不起,我现在将从我的脸颊上移开我的舌头......没有单元测试的代码可能会也可能不会被破坏.具有单元测试的代码可以通过单元测试,但单元测试是否"已损坏",即它实际上是否完全测试了所需的行为?啊,代码哲学.他们应该开设课程...... (2认同)