List<T>的Count属性能否为-1?代码场景下的技术问询
List.Count属性能否为-1?
标准List的Count不可能为-1
.NET标准库中的List<T>.Count是只读属性,内部通过_size字段维护实际元素数量,初始化值为0,添加元素时递增、移除时递减,始终保证是非负整数,正常使用下不可能出现-1。
实现Count返回-1的两种方式
如果非要让一个类似List的对象Count返回-1,有两种可行方式:
- 自定义实现IList
接口
自己编写一个类实现IList<T>,在Count属性中直接返回-1,示例代码:
public class CustomNegativeCountList<T> : IList<T> { private readonly List<T> _internalList = new List<T>(); // 实现IList<T>的其他必需成员 public void Add(T item) => _internalList.Add(item); public bool Remove(T item) => _internalList.Remove(item); public int IndexOf(T item) => _internalList.IndexOf(item); // 省略其他成员实现... // 自定义Count属性返回-1 public int Count => -1; public bool IsReadOnly => false; }
当把这个类的实例赋值给IList<T>类型变量时,访问Count就会得到-1。
- 通过反射修改List
内部字段
利用反射强行修改List<T>内部的_size私有字段(该字段存储了Count的实际值),示例代码:
var list = new List<string>(); // 获取List<T>的私有字段_size var sizeField = typeof(List<string>).GetField("_size", BindingFlags.NonPublic | BindingFlags.Instance); // 强行设置为-1 sizeField.SetValue(list, -1); // 此时输出Count会得到-1 Console.WriteLine(list.Count);
注意:这种方式属于非常规操作,会破坏List<T>的内部状态,后续对该List执行添加、移除等操作大概率会抛出异常,仅用于研究或测试场景,绝对不能在生产代码中使用。
关于默认Count为-1的List
.NET标准库中不存在默认Count为-1的List类型。入门练习中常用-1作为终止标记,一般是针对数组索引、循环控制等自定义逻辑,和List的Count属性无关。
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

