为什么C#的List<T>.Count为有符号int?其值是否可能为负数?
结论
正常使用.NET标准库的List<T>时,Count属性永远不会返回小于0的值,你可以直接用myList.Count == 0判断空列表。
原因说明
- 你贴的是简化版的
List<T>定义,官方实际实现中Count的返回值来自内部维护的私有计数字段,所有对这个字段的修改逻辑(新增元素、删除元素、清空列表等)都做了严格的边界校验,取值范围只会在0到Int32.MaxValue之间,不可能出现负数。 - 只有通过反射、unsafe代码等非常规手段强行修改内部私有字段的场景下,才有可能得到负数的
Count值,这种属于故意破坏类封装的异常操作,正常业务开发中不需要考虑这种情况。 - 另外.NET还提供了更语义化的扩展方法
myList.Any()来判断序列是否包含元素,可读性比判断Count更高,你也可以根据编码习惯选用。
内容的提问来源于stack exchange,提问作者Hanley
相关产品推荐
相关产品推荐

