C#程序员最易犯的编程错误

2019-12-26 13:38:31王振洲

  下面的例子演示了其他一组常见的方法,一种会抛出异常,而另一种则不会:
 

  1. int.Parse();  // 如果参数无法解析会抛出异常  int.TryParse(); // 返回bool值表示解析是否成功 
  2.   IEnumerable.First();   // 如果序列为空,则抛出异常 
  3. IEnumerable.FirstOrDefault(); // 如果序列为空则返回 null 或默认值 
?

  有些程序员认为“异常有害”,所以他们自然而然的认为不抛出异常的程序显得更加“高大上”。虽然在某些情况下,这种观点是正确的,但是这种观点并不适用于所有的情况。

  举个具体的例子,某些情况下当异常产生时,你有另一个可选的措施(如,默认值),那么,选用不抛出异常的方法是一个比较好的选择。在这种情况下,你最好像下面这样写:
 

  1. if (int.TryParse(myString, out myInt)) { // use myInt  } else { // use default value 
  2. }   而不是这样: 
  3. try {  myInt = int.Parse(myString); // use myInt 
  4. } catch (FormatException) { // use default value  } 
?

  但是,这并不说明 TryParse 方法更好。某些情况下适合,某些情况下则不适合。这就是为什么有两种方法供我们选择了。根据你的具体情况选择合适的方法,并记住,作为一个开发者,异常是完全可以成为你的朋友的。

常见错误10: 累积编译器警告而不处理

  这个错误并不是C#所特有的,但是在C#中这种情况却比较多,尤其是从C#编译器弃用了严格的类型检查之后。

  警告的出现是有原因的。所有C#的编译错误都表明你的代码有缺陷,同样,一些警告也是这样。这两者之间的区别在于,对于警告来说,编译器可以按照你代码的指示工作,但是,编译器发现你的代码有一点小问题,很有可能会使你的代码不能按照你的预期运行。

  一个常见的例子是,你修改了你的代码,并移除了对某些变量的使用,但是,你忘了移除该变量的声明。程序可以很好的运行,但是编译器会提示有未使用的变量。程序可以很好的运行使得一些程序员不去修复警告。更有甚者,有些程序员很好的利用了Visual Studio中“错误列表”窗口的隐藏警告的功能,很容易的就把警告过滤了,以便专注于错误。不用多长时间,就会积累一堆警告,这些警告都被“惬意”的忽略了(更糟的是,隐藏掉了)。