如何把一个非0为底的一维数组转换成强类型的数组

vwxyzh 2008-09-02 12:04:26
用下面的代码创建的一个以1为底,长度是2的数组:
Array array = Array.CreateInstance(typeof(int), new int[] { 2 }, new int[] { 1 });

如何把它转成强类型的int数组?

附:
int[] x = array as int[];

的结果为null
...全文
279 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
vwxyzh 2008-09-04
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 kevin_cheung 的回复:]
Array array = Array.CreateInstance(typeof(int), new int[] { 2 }, new int[] { 1 });
int[] x = new int[2];
array.CopyTo(x, 0);


[/Quote]
又是CopyTo。。。
LovingAlison 2008-09-04
  • 打赏
  • 举报
回复
Array array = Array.CreateInstance(typeof(int), new int[] { 2 }, new int[] { 1 });
int[] x = new int[2];
array.CopyTo(x, 0);

我姓区不姓区 2008-09-04
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 yatobiaf 的回复:]
研究了好久,放弃了.这应该是微软的一个BUG吧
不过我15楼的重载下标运算符的方法应该可以跳过这个问题,就是用户输入x[i]的时候,遍历器返回一个x[i-1],这样也可以给人改变了下标起始位置的错觉.
[/Quote]
同,实在没有找到什么好方法……
vwxyzh 2008-09-04
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 yatobiaf 的回复:]
研究了好久,放弃了.这应该是微软的一个BUG吧
不过我15楼的重载下标运算符的方法应该可以跳过这个问题,就是用户输入x[i]的时候,遍历器返回一个x[i-1],这样也可以给人改变了下标起始位置的错觉.
[/Quote]
也许真的是微软的bug。。。
vwxyzh 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 yatobiaf 的回复:]
不好意思啊,我没搞明白楼主想问什么就回答了...呵呵
[/Quote]
请比较这两段代码运行的结果:
Array array = Array.CreateInstance(typeof(int), new int[] { 2, 2 }, new int[] { 1, 1 });
int[,] x = array as int[,];
x[1,1] = 1;
x[1,2] = 2;
x[2,1] = 3;
x[1,2] = 4;

Array array = Array.CreateInstance(typeof(int), new int[] { 2 }, new int[] { 1 });
int[] y = array as int[];
y[1] = 1;
y[2] = 2;
vwxyzh 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 nullpassword 的回复:]
手动Copy 再插进去
[/Quote]
又是copy,都说了不要回复copy
nullpassword 2008-09-03
  • 打赏
  • 举报
回复
手动Copy 再插进去
yatobiaf 2008-09-03
  • 打赏
  • 举报
回复
不好意思啊,我没搞明白楼主想问什么就回答了...呵呵
vwxyzh 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 HimeTale 的回复:]
还好,虽然解决不了
但我至少还知道楼主在问啥....
好奇怪,2维跟1维差距咋那么大呢???
[/Quote]
虽然不是问题的答案,不过觉得还是很欣慰,至少有人理解我在问什么了

再强调一下:
不要回复新建实例(包括copy到int[])的方案,因为场景不允许
不要回复如何遍历(这个和我的问题无关。。。)
不要回复直接用Array的GetValue和SetValue这两个方法,因为场景需要强类型

另外,欢迎帮顶
如果实在没有什么方案的话,就当散分
Adechen 2008-09-03
  • 打赏
  • 举报
回复
学习,关注吧
viki117 2008-09-03
  • 打赏
  • 举报
回复
菜鸟学习中。。
hm7921936 2008-09-03
  • 打赏
  • 举报
回复
mark
yatobiaf 2008-09-03
  • 打赏
  • 举报
回复
研究了好久,放弃了.这应该是微软的一个BUG吧
不过我15楼的重载下标运算符的方法应该可以跳过这个问题,就是用户输入x[i]的时候,遍历器返回一个x[i-1],这样也可以给人改变了下标起始位置的错觉.
edvardzou 2008-09-03
  • 打赏
  • 举报
回复
学习+帮顶吧
vwxyzh 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 wolf_life 的回复:]
27楼的哥们在说梦话。。


楼主我刚试了你说的这个问题。我找到了原因。。。

Array arr = Array.CreateInstance(typeof(int), new int[] { 5 },new int[] {0 });

int[] nArr = arr as int[];

重要的是我标注为红字部门。。。1维数组的下限只能是0,而你写成了1。。

给我分啊。。。我 要穷死了。。啊哈哈
[/Quote]
28楼的哥们在说梦话。。
要建个下限是0的1维数组的,直接new int[5]就可以了。。。
还要绕一个大圈用Array.CreateInstance来创建实例吗?

1维数组的下限只能是0,用下限是1创建后,看看你的arr是不是null
wolf_life 2008-09-03
  • 打赏
  • 举报
回复
27楼的哥们在说梦话。。


楼主我刚试了你说的这个问题。我找到了原因。。。

Array arr = Array.CreateInstance(typeof(int), new int[] { 5 }, new int[] {0 });

int[] nArr = arr as int[];

重要的是我标注为红字部门。。。1维数组的下限只能是0,而你写成了1。。

给我分啊。。。我 要穷死了。。啊哈哈
wolf_life 2008-09-03
  • 打赏
  • 举报
回复
copy就是另一个实例了,同步两边的值也是一件非常麻烦的事情,所以不希望新建一个数组实例

楼主的意思是不转化成int数组后,int数组中的值发生变化,array里的值也放生变化呢?

如果是这样的话。。我没想到什么好的方法。array本身是一个实例,在内存分配地址,


int数据和array不是一种类型,也没有什么继承关系,所以要用int必须重新生成对象。运行库不能对这样的数组找相同内存地址。。。


个人意见。。。哈哈
优途科技 2008-09-03
  • 打赏
  • 举报
回复
2维跟1维差距咋那么大呢?
足球中国 2008-09-02
  • 打赏
  • 举报
回复
array.CopyTo(x, 0);
我姓区不姓区 2008-09-02
  • 打赏
  • 举报
回复

Array array = Array.CreateInstance(typeof(int), new int[] { 2 }, new int[] { 1 });
int[] x = new int[2];
array.CopyTo(x, 0);

加载更多回复(15)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧