C#中能否将null作为数组索引?该写法具体含义是什么?
C#中
totals[null].AddTrip();的含义解析 首先明确:这不是普通数组的索引操作,而是自定义类型的索引器调用——普通C#数组不允许用null作为索引,只有实现了支持null参数的自定义索引器的类型,才能这么写。
1. 普通数组不能用null索引
普通C#数组的索引必须是整数类型(如int、uint),传递null会直接编译报错,因为null无法隐式转换为数值类型。比如执行int[] arr = new int[3]; arr[null];,编译器会提示“无法将null转换为int,因为它是值类型”。
2. 自定义索引器支持null参数
如果这段代码能正常编译运行,说明totals是一个自定义类型,该类型定义了参数为引用类型的索引器。举个典型的实现例子:
// 自定义的行程跟踪器类型 public class TotalTracker { // 用字典存储不同key对应的行程集合,支持null作为key private Dictionary<object, TripCollection> _tripGroups = new Dictionary<object, TripCollection>(); // 定义接受object类型参数的索引器 public TripCollection this[object key] { get { // 如果key(包括null)不存在,就创建新的行程集合并加入字典 if (!_tripGroups.TryGetValue(key, out var collection)) { collection = new TripCollection(); _tripGroups[key] = collection; } return collection; } } } // 行程集合类型 public class TripCollection { public void AddTrip() { // 实现添加行程的逻辑 } }
在这个例子中,totals[null]会调用索引器的getter:以null作为key从字典中查找对应的TripCollection,如果不存在就自动创建,最后调用该实例的AddTrip()方法。
3. 常见使用场景
这种写法通常用来处理“无分类”或“默认分组”的场景——把null作为一个特殊的标识,将所有未明确归属到其他分组的行程数据统一管理。
内容的提问来源于stack exchange,提问作者Wallnut
相关产品推荐
相关产品推荐

