初级 C# 开发者常见错误及如何避免

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么错误是正常的



每个开发者的成长之路都始于错误。C# (.NET) 是一种功能强大且强类型的语言,对错误的容忍度低于动态语言,但作为回报,它提供了可靠性和高性能。本文将剖析初学者最容易遇到的4个常见陷阱,并展示如何避免它们。无论你是刚开始学习C#,还是想巩固已有知识,这篇文章都将对你有所帮助。



1. 忽略null和NullReferenceException



C#中最常见的错误是 NullReferenceException。当你尝试访问一个 null 对象的成员时,就会发生此错误。



问题示例

string text = null;int length = text.Length; // 错误!NullReferenceException


初学者经常忘记检查方法返回的值,或者错误地认为某个对象一定存在。



正确做法

  • 在使用对象之前,始终检查对象是否为 null。
  • 使用 ?. (空条件运算符)和 ??(空合并运算符)。


string text = GetText(); // 可能返回 nullint? length = text?.Length; // 如果 text == null,则 length 为 nullint safeLength = text?.Length ?? 0; // 如果为 null,则返回 0Console.WriteLine(safeLength);


此外,在 C# 8.0+ 中,引入了可为空引用类型,可通过 #nullable enable 启用。它强制你明确指定变量是否可以为 null,并在编译时警告潜在问题。



2. 滥用var导致可读性下降



var 关键字允许编译器自行推断变量的类型。这很方便,但初学者常常过度使用它,导致代码可读性变差。



糟糕代码示例

var data = GetData();var result = Process(data);var output = Transform(result); // 什么类型?不明确。


一个月后,你(或你的同事)不查看方法定义,就无法快速理解 data 的类型。



何时使用var

  • 当从右侧表达式可以明显看出类型时(例如 var list = new List<int>();)
  • 处理匿名类型和 LINQ 查询时。


// 好的用法:类型显而易见var numbers = new List<int> { 1, 2, 3 };

// 好的用法:匿名类型var person = new { Name = "John", Age = 30 };

// 坏的用法:类型不明确var config = LoadConfiguration(); // 更好:Configuration config = LoadConfiguration();


黄金法则:仅在能提升可读性时使用 var,而非降低可读性时。



3. 吞没异常和空的catch块



许多初学者在遇到异常时,会写一个空的 catch 块或仅输出一条消息而不分析错误。这会使程序不稳定并增加调试难度。



反模式示例

try{    int.Parse("not a number");}catch (Exception){    // 不做任何处理——错误被"吞没"了}


应用程序会继续运行,但处于错误状态。用户不会知道问题所在,数据也可能被损坏。



正确处理异常的方法

  • 除非你打算处理所有类型的错误,否则不要捕获通用的 Exception。
  • 只捕获你能处理的异常(例如 FormatException、FileNotFoundException)。
  • 使用 finally 释放资源(文件、连接)。
  • 记录错误日志。


try{    int number = int.Parse(userInput);}catch (FormatException ex){    // 记录日志并通知用户}                

博客

书籍推荐