C#把数组的元素复制到另一个数组

面试的时候有道题publicvoidFuZhi(ObjectA[],ObjectB[]){//把b中元素copy挨个到a}我写了个forech遍历b数组,然后a.item... 面试的时候有道题
public void FuZhi(Object A[],Object B[])
{
//把b中元素copy挨个到a
}
我写了个forech遍历b数组, 然后 a.item.add(b[i]),不晓得错没有
展开
 我来答
百度网友8ac2cc0d6
推荐于2016-05-13 · 超过25用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:57.5万
展开全部
数组没有item

List<object> copyList=new List<object>();
foreach(object a in A)
{
copyList.Add(a);
}
B=copyList.ToArray<object>();//需要引用System.Linq;
return B;

上面这样做,不需要知道A数组的长度。

==========================
如果你是值类型或string数组很简单:
#region IntV数组复制
/// <summary>
/// 方法一:使用for循环
/// </summary>
/// <param name="pins"></param>
/// <returns></returns>
public IntV[] CopyObjectArray1(IntV[] pins)
{
//IntV []pins = {9,3,7,2}
IntV[] copy = new IntV[pins.Length];
for (int i = 0; i < pins.Length; i++)
{
copy[i] = pins[i];
}
return copy;
}

/// <summary>
/// 方法二:使用数组对象中的CopyTo()方法
/// </summary>
/// <param name="pins"></param>
/// <returns></returns>
public IntV[] CopyObjectArray2(IntV[] pins)
{
//IntV []pins = {9,3,7,2}
IntV[] copy2 = new IntV[pins.Length];
pins.CopyTo(copy2, 0);
return copy2;
}

/// <summary>
/// 方法三:使用Array类的一个静态方法Copy()
/// </summary>
/// <param name="pins"></param>
/// <returns></returns>
public IntV[] CopyObjectArray3(IntV[] pins)
{
//IntV []pins = {9,3,7,2}
IntV[] copy3 = new IntV[pins.Length];
Array.Copy(pins, copy3, pins.Length);
return copy3;
}

/// <summary>
/// 方法四:使用Array类中的一个实例方法Clone(),可以一次调用,最方便,但是Clone()方法返回的是一个对象,所以要强制转换成恰当的类类型。
/// </summary>
/// <param name="pins"></param>
/// <returns></returns>
public IntV[] CopyObjectArray4(IntV[] pins)
{
//IntV []pins = {9,3,7,2}
IntV[] copy4 = (IntV[])pins.Clone();
return copy4;
}
#endregion
如果是对象数组深度拷贝,则要用其它方法了:

这个是对象必须继承序列化[Serializable]
public static object CloneObj(object obj)
{
BinaryFormatter Formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
MemoryStream stream = new MemoryStream();
Formatter.Serialize(stream, obj);
stream.Position = 0;
object clonedObj = Formatter.Deserialize(stream);
stream.Close();
return clonedObj;
}

另外一种深度复制,就是继承接口ICloneable
public class IntV : ICloneable
{
public int V
{
get;
set;
}
public override string ToString()
{
return V.ToString();
}
public object Clone()
{
return MemberwiseClone() ;
}
}
下面你只要这样使用就可以了
IntV v1 = new IntV();
v1.V = 10;

IntV v2 = v1.Clone() as IntV;
v2.V = 99;
luchuanbaker
推荐于2018-03-29 · TA获得超过2041个赞
知道大有可为答主
回答量:2604
采纳率:83%
帮助的人:1180万
展开全部
大哥,你这样是传递的引用,不是复制!!!!!
a = (object[])b.Clone();
其实只要这样就可以了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yy21drd
2011-11-27 · 超过15用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:41万
展开全部
for(int i=0;i<n;i++)
objectA[i]=objictB[i];

n为数组大小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式