C#中数组下标为-1代表什么意思 这样会产生异常,报indexoutofrange异常 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般情况,代表一个 IndexOutOfRangeException...但是如果这个是类似 (int[,])Array.CreateInstance(typeof(int), new[] { 5, 5 }, new[] { -1, -1 }); 这样创建的,那么负数下标就是合法的。或者说,CLI定义里是支持负下标数组的,但是c#本身的数组定义语法不支持。而且.net基础类库也不支持操作负下标数组,所以最好不要用。 ruby这样的语言支持,-1表示最大下标,等于绕回去了。C#没听说这种写法。 虽然没什么意义,我还是再说下,负数下标(其实是非0起始的下标)的数组是可以存在的。参考 ECMA-335 I.8.9.1 Array types 里面的描述,这样子的数组不符合CLS规范,而且框架类库也无需支持。这里负数没有什么特殊的意义,只是可以定义一个起始下标,和数组的大小,范围里包含的数就可以使用。可以测试:// arr 是 int[-1 .. 3, -1 .. 3] 的数组,类型为 int[,]var arr = (int[,])Array.CreateInstance(typeof(int), new[] { 5, 5 }, new[] { -1, -1 });arr[-1, -1] = 1; // okarr[-1, 3] = 1; // okarr[-1, 4] = 1; // exceptionarr[-2, 0] = 1; // exception上面是二维的,一维数组因为clr生成的类型不同,无法使用c#数组的语法,但是可以通过Array上面的方法操作:// arr 是 int[-1 .. 3] 的数组,类型为 int[*]var arr = Array.CreateInstance(typeof(int), new[] { 5 }, new[] { -1 });arr.SetValue(1, -1); // okarr.SetValue(1, 3); // okarr.SetValue(1, 4); // exceptionarr.SetValue(1, -2); // exception LBound = 0UBound >= 0-1 < LBound所以越界... 数组下标确实可以从非0开始。基本上,如果你使用COM跟Office系列交互,那么数组下标可能从1开始(而不是从0开始)。除此外以,很少遇到其它的表示形式。你应该贴出你所看到的那个东西的地址。也许它只是印错了呢。 怎样判断一个事件是否包含一个特定的委托(或者说一个特定的方法)? 请教一下如何设置GridView中特殊行的背景色。 vs2003 里面DataView怎么转DataSet 弹出窗口内容显示不全,显示的是压在下面那个窗体被遮盖的内容 socket连接GPRS,无法向指定用户发送信息。 淘宝刷新周期 思归,孟子等高手帮忙,Xml格式化出错问题 急!请好心人指教:水晶报表小问题 C# 调用 Session时出现了一下错误,只有一个页面会这样子 请问这个例子怎样运行? 请教如何通过正则提取字符串 以下代码类型和c#如何转换?、
但是如果这个是类似 (int[,])Array.CreateInstance(typeof(int), new[] { 5, 5 }, new[] { -1, -1 }); 这样创建的,那么负数下标就是合法的。或者说,CLI定义里是支持负下标数组的,但是c#本身的数组定义语法不支持。而且.net基础类库也不支持操作负下标数组,所以最好不要用。
C#没听说这种写法。
var arr = (int[,])Array.CreateInstance(typeof(int), new[] { 5, 5 }, new[] { -1, -1 });
arr[-1, -1] = 1; // ok
arr[-1, 3] = 1; // ok
arr[-1, 4] = 1; // exception
arr[-2, 0] = 1; // exception上面是二维的,一维数组因为clr生成的类型不同,无法使用c#数组的语法,但是可以通过Array上面的方法操作:// arr 是 int[-1 .. 3] 的数组,类型为 int[*]
var arr = Array.CreateInstance(typeof(int), new[] { 5 }, new[] { -1 });
arr.SetValue(1, -1); // ok
arr.SetValue(1, 3); // ok
arr.SetValue(1, 4); // exception
arr.SetValue(1, -2); // exception
LBound = 0
UBound >= 0
-1 < LBound
所以越界...