Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这个代码有多糟糕?_C#_Coding Style - Fatal编程技术网

C# 这个代码有多糟糕?

C# 这个代码有多糟糕?,c#,coding-style,C#,Coding Style,我继承了一个用C#编写的在线测验应用程序,上面到处都是这些代码行 那么这个代码有多糟糕 我可能遇到哪些潜在问题 我怎样才能改进它 守则: strTestPasses+=“Subject”+((Hashtable)((ArrayList)((Hashtable)MultipleTestPasses[i])[“HasMultipleDataSet”])[j])[“Subject”]+”; 好吧,主观上,我会说它像罪一样丑陋。好吧,主观上,我会说它像罪一样丑陋。它不伟大,但我见过更糟的 为了不惊吓任何

我继承了一个用C#编写的在线测验应用程序,上面到处都是这些代码行

那么这个代码有多糟糕

我可能遇到哪些潜在问题

我怎样才能改进它

守则:
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。第二个选项还允许在某个点将每行的标题分解为变量


对于下一步,应该将多个路径转换为真实对象。因为看起来他使用的是硬编码键,所以每个“键”实际上都对应于一个类的属性。

在不知道代码库的大小和范围的情况下,我发现这行代码中有两件事让我非常困扰

  • HTML布局未与内容分离
  • 主题应该从描述命名的函数返回
  • 我更喜欢看这样的节目:

    strTestPassesStringBuilder.Append(newTableRow("Subject", getSubject());
    

    如果和valign选项是通过CSS控制的。

    在不知道代码库的大小和范围的情况下,我发现这行代码中有两件事让我非常困扰

  • HTML布局未与内容分离
  • 主题应该从描述命名的函数返回
  • 我更喜欢看这样的节目:

    strTestPassesStringBuilder.Append(newTableRow("Subject", getSubject());
    
    其中,和valign选项通过CSS控制

    哦。。。我的眼睛


    哦。。。我的眼睛…

    这非常糟糕,因为它包含以下缺陷:

    • 字符串连接,而StringBuilder或
      ((Hashtable)((ArrayList)((Hashtable)MultipleTestPasses[i])["HasMultipleDataSet"])[j])["subject"]