| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4934 人关注过本帖
标题:[求助]Array.Copy(string,char[],string.Length)
只看楼主 加入收藏
月夜枫华
Rank: 4
等 级:贵宾
威 望:12
帖 子:437
专家分:42
注 册:2006-1-2
收藏
得分:0 

楼主对引用类型和值类型还是区分不清,char[] c1=c2之后,对c1和c2任何的修改都会改变原始数据,执行过Array.copy后才会复制的。
而且字符串在C#中已经不是字符数组了,不可以直接Copy的。
如果源地址和目标地址为整型和字符(或其他类型的)进行复制,可以使用ArrayList进行存储。或使用object[]
原因很简单,char[]中每个元素1字节,不可能装得下int[]中的元素!


2006-08-28 11:55
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
以下是引用月夜枫华在2006-8-28 11:55:13的发言:

楼主对引用类型和值类型还是区分不清,char[] c1=c2之后,对c1和c2任何的修改都会改变原始数据,执行过Array.copy后才会复制的。
而且字符串在C#中已经不是字符数组了,不可以直接Copy的。
如果源地址和目标地址为整型和字符(或其他类型的)进行复制,可以使用ArrayList进行存储。或使用object[]
原因很简单,char[]中每个元素1字节,不可能装得下int[]中的元素!

版主所说的我承认,但是,我的初衷是使用Array.copy函数。
msdn上的相关例子是这样定义的:Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );
Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );
Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );

这个是使用array。copy 从int拷贝至obj数组。 我的理解是 obj数组对copy方法要求没有限制,应该不会有类型转换的问题。
我想请教一下 有没有直接在不同类型数组中copy的方法,例如使用array。copy函数。
并且不是使用 Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 ); 这样定义数组的方法。
数组:int[] i=new int[3];这样的定义的数组之间是否可以 copy?
如果说char[]的元素比较小 ,那么从char[]copy至int[]数组呢?
编译的时候主要是数组类型的问题。
使用array 。copy


2006-08-28 14:33
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
收藏
得分:0 
以下是引用jingzhao22visa在2006-8-28 14:33:13的发言:

版主所说的我承认,但是,我的初衷是使用Array.copy函数。
msdn上的相关例子是这样定义的:Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );
Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );
Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );

这个是使用array。copy 从int拷贝至obj数组。 我的理解是 obj数组对copy方法要求没有限制,应该不会有类型转换的问题。
我想请教一下 有没有直接在不同类型数组中copy的方法,例如使用array。copy函数。
并且不是使用 Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 ); 这样定义数组的方法。
数组:int[] i=new int[3];这样的定义的数组之间是否可以 copy?
如果说char[]的元素比较小 ,那么从char[]copy至int[]数组呢?
编译的时候主要是数组类型的问题。
使用array 。copy

基本上能夠隱試轉換的
完全可以array.copy


[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2006-08-28 14:39
月夜枫华
Rank: 4
等 级:贵宾
威 望:12
帖 子:437
专家分:42
注 册:2006-1-2
收藏
得分:0 

由于object数组的元素可以接受所有的数据类型,所以可以把object数组最为目的接收者,我这里没有运行环境,你可以试着把short数组赋给int数组,由于char[]是字符类型,所以和整型直接赋值可能会出错。


2006-08-28 14:39
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
以下是引用chenjin145在2006-8-28 14:39:39的发言:

基本上能夠隱試轉換的
完全可以array.copy


array。copy的时候报类型转换有问题,不知道怎么改?
有没有代码贴一下 ?谢谢。
不是
string s=“asdfa”s.padleft(16)
char[16] ch
array,copy(s,ch,16)
这样字的,如果是
array,copy(s.tochararray(),ch,16)
就不用了,因为 源数组已经是char[]的数组了,不是我所理解的不同类型数组之间的转换使用array。copy()。

主要是想看能不能直接转换的数组类型。

谢谢。。。


2006-08-28 14:44
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
以下是引用月夜枫华在2006-8-28 14:39:51的发言:

由于object数组的元素可以接受所有的数据类型,所以可以把object数组最为目的接收者,我这里没有运行环境,你可以试着把short数组赋给int数组,由于char[]是字符类型,所以和整型直接赋值可能会出错。

谢谢,不过现在是编译的时候就有问题。
因为array。copy要求system.array类型的数组,
编译提示说数组类型不符合。


2006-08-28 14:46
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
收藏
得分:0 
byte->short
byte->int
byte->double
char->byte
char->int
char->double
應該都可以
string其實是引用類型 無法隱式轉換

[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2006-08-28 14:47
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
以下是引用chenjin145在2006-8-28 14:47:08的发言:
byte->short
byte->int
byte->double
char->byte
char->int
char->double
應該都可以
string其實是引用類型 無法隱式轉換

char-byte似乎不行,长度好像不够。

“string其實是引用類型 無法隱式轉換”那你的意思应该是说string 是无法用array。copy这个函数进行复制转换的是吧。

谢谢你了。。。


2006-08-28 15:16
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
收藏
得分:0 
c#中char是Unicode 2字節
原來如此 還要多謝你了

string可以啊 string[] 到string[],

[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2006-08-28 15:27
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
收藏
得分:0 
以下是引用chenjin145在2006-8-28 15:27:15的发言:
c#中char是Unicode 2字節
原來如此 還要多謝你了

string可以啊 string[] 到string[],

C#现在默认是UNICODE2字节表示所有的字符
比如汉字"中"就可以直接赋予一个char
它的值好象是2万多吧
在C#.NET里一个char是占用2个BYTE的
而以前的很多环境里都是一个字节的
比如C里一般是一个字节的
这个时候表示汉字要用2个BYTE表示
有高位低位之说
比如 一个汉字是 E786 那么它的值就是 E7*256+86
因此同样是一个汉字在以前的环境里和在C#.NET里的值是不一样的


此号自封于2006年11月30日
2006-08-29 10:06
快速回复:[求助]Array.Copy(string,char[],string.Length)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038006 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved