Han*_*ley 6 .net c# list comparison-operators empty-list
public class List<T>\n{\n public int Count\n {\n get;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n我注意到Count是一个int,结果会小于 0\xef\xbc\x9f
如果Count可以小于0,我必须写\xef\xbc\x9a
if(myList.Count < 1)\n{\n \n}\nRun Code Online (Sandbox Code Playgroud)\n否则我可以这样写:
\nif(myList.Count == 0)\n{\n \n}\nRun Code Online (Sandbox Code Playgroud)\n
Dai*_*Dai 13
来自评论:
为了安全起见,因为我注意到伯爵是 a
int但不是 auint
在List<T>设计该类时,Microsoft 的 .NET 类库设计规则意味着UInt32(aka uint) 不能用于任何public成员,因此改为使用Int32(aka )。int
Count使用int(aka Int32) 属性而不是uint(或UInt32) 属性,是因为该List<T>类型是在 Microsoft 仍遵守公共语言规范(“CLS”)时定义的。
Int32符合 CLS 标准。UInt32不符合CLS。Count输入为 asUInt32而不是,Int32那么其他语言的用户List<T>.Count根本无法使用.List<T>.Count为负数或以其他方式无效吗?如果您List<T>以安全的方式使用实例,那么不会,该.Count属性将始终返回范围内的值0(2^31a的实际最大计数是另一个问题,已在此处得到解答List<T>)。
但是,如果您List<T>以线程不安全的方式使用 a (例如,有 2 个或更多线程同时在列表中添加和删除项目而未lock正确使用),或者如果您使用反射等技巧来覆盖.Count属性的字段值,那么yes,您可以打破东西。所以不要这样做:)
- 为了实现完全的互操作性场景,在代码中创建的所有对象都必须依赖于使用它们的语言(它们的调用者)中的某些通用性。
- 由于有许多不同的语言,.NET 在称为公共语言规范 (CLS) 的内容中指定了这些共性。
这篇 MSDN 文章中描述了公共语言规范,其中包含 .NET 内置类型的列表,但禁止在符合 CLS 的框架和可再发行库中使用这些类型。
System.SByte又名sbyte。
System.UInt16又名ushort。System.UInt32又名uint。System.UInt64又名ulong。System.UIntPtr。还:
- CLS 合规性规则仅适用于组件的公共接口,而不适用于其私有实现。
- 例如,除此之外的无符号整数
Byte不符合 CLS [...]。
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |