C#泛型Node类空实例时,如何让Next属性Getter返回Null
问题分析与解决方案
你的核心问题在于:当Node<T>变量本身是null时,你根本无法调用它的Next属性——因为访问null对象的成员会直接抛出NullReferenceException,不会进入Next的Getter方法。所以你写的if (this != null)完全起不到作用,因为this只有在对象实例存在时才会有值,null对象不会执行这段Getter代码。
正确的处理方式
使用空传播运算符
?.访问属性
当你需要访问一个可能为null的Node<T>实例的Next时,直接用?.运算符,它会自动处理null情况:Node<int>? myNode = null; Node<int>? nextNode = myNode?.Next; // 这里会直接返回null,不会抛异常简化你的
Node<T>类代码
原代码中get/set里的this != null检查完全多余,因为只有当对象实例存在时,才能调用这些属性的访问器。修改后的类代码如下:public class Node<T> { private T _data; private Node<T>? _next; // 用可空引用类型标记_next可以为null(C#8+) public T Data { get => _data; set => _data = value; } public Node<T>? Next { get => _next; set => _next = value; } public Node(T data) { Data = data; Next = null; } }启用可空引用类型(可选但推荐)
如果使用C# 8及以上版本,建议在项目中启用可空引用类型,这样编译器会帮你检查可能的null引用问题,避免运行时异常。
内容的提问来源于stack exchange,提问作者Ioan
相关产品推荐
相关产品推荐

