当前位置: 首页 > 编程语言 > C#

为什么在C#中允许“long”作为数组长度?分享

时间:2023-04-10 11:42:19 C#

为什么在C#中允许“long”作为数组长度?我想尝试分配一个40亿字节的数组,这是我的C#代码:longsize=4*1000;大小*=1000;大小*=1000;byte[]array=newbyte[size];此代码在包含新的行时因System.OverflowException而失败。好吧,原来Length返回的是一个int,所以数组长度也被限制在一个int可以存储的范围内。那为什么没有编译时错误,赋值的时候允许long作为数组元素个数呢?因为规范在第7.6.10.4节中指出:表达式列表中的每个表达式必须是int、uint、long或ulong,或者可以隐式转换为这些类型中的一种或多种。创建大于2GiB的数组很可能很容易,即使它们还不受支持(但一旦CLR进行此类更改,语言就不会更改)。Mono确实支持这一点,但.NET4.5显然也允许更大的数组。顺便说一下数组长度int:还有LongLength,返回long。这是在.NET1.1中的,可能是面向未来的更改。为什么允许长数字作为数组长度?答案是:.net中的long表示Int64根据规范,数组索引可以是Int64。第二个问题:为什么会显示overflowexception?因为没有单个对象可以分配超过2GB的内存。这是CLR的限制,单个对象不能超过2GB,包括数组:C#OutOfMemoryExceptionforlargearrays这与32位或64位操作系统无关。也就是说,它不会阻止您使用超过该数量的总量,而不是一个对象。这是一个运行时错误,因为如果您将long(或其他初始化值)保留在范围内,它将起作用。您可以使用所有整数类型初始化数组:sbyte、char、short、int和long-全部编译;未签名的变体也可以。.Net4.5-4.6中有一个允许大型数组的解决方案。https://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspxlong是整数类型,因此可以用来定义数组;例外情况是构建太大且未专门使用long的数组。例如,这很好用:以上是C#学习教程:Whyis"long"allowedasanarraylengthinC#?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——longsize=20;byte[]array=newbyte[size];本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: