2016-01-17 26 views
6

Có hai mảng byte được điền với các giá trị khác nhau.Sao chép mảng byte vào một mảng byte khác trong C#

byte[] Array1 = new byte[5]; 
byte[] Array2 = new byte[5]; 

Sau đó, tôi cần Array1 để nhận được chính xác các giá trị giống như Array2.

Bằng cách nhập Array1 = Array2 Tôi sẽ chỉ đặt tham chiếu, điều này sẽ không sao chép các giá trị.

Giải pháp có thể là gì?

EDIT:

Tất cả các câu trả lời là tốt và tất cả các giải pháp làm việc. Mã từ giải pháp đầu tiên trông có vẻ mô tả hơn cho trường hợp cụ thể của tôi.

Array1 = Array2.ToArray();

Array1.CopyTo (array2, 0);

cũng như

Buffer.BlockCopy (array2, 0, array1, 0, 5);

+3

tra [ 'Buffer.BlockCopy'] (https://msdn.microsoft.com/en-us/library/system.buffer.blockcopy%28v = vs.110% 29.aspx). –

+3

Bản sao có thể có của [Sao chép byte từ một mảng byte đến vị trí cụ thể của mảng Byte khác trong C#] (http://stackoverflow.com/questions/26887421/copy-bytes-from-a-byte-array-to-a -specific-position-of-another-byte-array-in-cs) –

+0

Không, mảng đầu tiên phải là bản sao chính xác của phần thứ hai. Nhưng nó không nên được liên kết trong bất kỳ cách nào với nó. Không nên là một con trỏ. – acoder

Trả lời

13

Một giải pháp kê biếu không của LINQ ...

Array1 = Array2.ToArray(); 

EDIT: bạn không cần phải phân bổ không gian cho array1 trước khi sử dụng cuộc gọi LINQ này. Việc phân bổ cho Array1 được thực hiện trong phạm vi ToArray(). ví dụ hoàn chỉnh hơn dưới đây

byte[] Array2 = new byte[5]; 
// set values for Array2 
byte[] Array1 = Array2.ToArray(); 
+1

Đây là một giải pháp khá gọn gàng, nhưng kể từ khi OP đã phân bổ mảng đích đã ** và ** đã nói, "Tôi chỉ đặt tham chiếu, tôi không sao chép các giá trị", sau đó tôi nghĩ sẽ thận trọng khi chỉ ra câu trả lời của bạn rằng bạn đang tạo tham chiếu mới và không sao chép các giá trị vào mảng được phân bổ trước. – Enigmativity

+1

Sẽ làm, câu lệnh trong OP "Bằng cách nhập' Array1 = Array2' Tôi chỉ cần đặt tham chiếu, tôi không sao chép các giá trị "Tôi nghĩ là một nỗ lực để nói rằng tham chiếu mảng đã được sao chép và các giá trị đó là không trùng lặp. Điều này cũng có vẻ là trường hợp trong bình luận sau này của anh ấy "Nhưng nó không nên được liên kết trong bất kỳ cách nào với nó.", mà tôi nghĩ là một nỗ lực để nói' Array1 [0] = (byte) 1' sẽ không làm gì với các giá trị trong 'Array2' –

+1

Vâng, tôi đồng ý. Đó là lý do tại sao tôi nghĩ câu trả lời của bạn là một giải pháp khá gọn gàng. chỉ cần nghĩ rằng OP có thể cần phải hiểu cơ học sâu hơn một chút – Enigmativity

Các vấn đề liên quan