Nếu tôi có một mảng byte đã tạo byte [] binBuffer = new byte [256] và tôi điền 100 byte của mảng, nếu tôi muốn chỉ chuyển 100 byte đó cho một số phương thức khác , là nó có thể làm điều đó mà không tạo ra một mảng byte mới của 100 byte, sao chép từ mảng cũ đến mới, sau đó đi qua mảng mới? Có bằng cách nào đó tôi chỉ có thể vượt qua 100 byte đầu tiên. Ứng dụng của tôi đặc biệt áp dụng để chuyển mảng tới một thủ tục được lưu trữ.sử dụng một phần của mảng byte
Trả lời
Nếu bạn có thể sử dụng LINQ:
SomeMethod(binBuffer.Take(100));
nếu bạn đang sử dụng .net 3.5 bạn có thể sử dụng phương pháp mở rộng Đưa() và làm như sau:
class Program
{
static void Main(string[] args)
{
byte[] b = new byte[1000];
dowork(b.Take(10).ToArray());
}
public static void dowork(byte[] b)
{
// do some work
}
}
Nếu bạn downvote, xin vui lòng nêu lý do tại sao ... Vì vậy, chúng tôi có thể hiểu tại sao câu trả lời đưa ra là không hợp lệ. – Jeremy
Tôi đã không làm downvoting, nhưng tôi giả sử nó đã được thực hiện bởi vì câu hỏi nói rằng "mà không tạo ra một mảng byte mới," mà 'Take()' chắc chắn nhất hiện. – Alex
Khi một mảng được truyền với một phương thức, chỉ một tham chiếu đến nó thực sự được truyền, vì các mảng thực sự là các kiểu tham chiếu. Về cơ bản, bạn có một con trỏ đến mảng, và sau đó bù đắp trong các dấu ngoặc vuông chỉ cho bạn biết có bao nhiêu "khe" cách xa điểm bắt đầu. Do đó, cách duy nhất để thực hiện điều này là chuyển hai tham số cho phương thức của bạn. Một là mảng thực, và thứ hai là số tối đa cho đến khi bạn cần đến, trong trường hợp của bạn, nó sẽ là 100. Trong phương thức đó bạn chỉ lặp qua mảng cho đến khi đạt đến số tối đa.
Một mô hình rất phổ biến khi làm việc với bộ đệm là: mô hình
Foo(byte[] data, int offset, int count) {...}
. Tuy nhiên, bạn không thể sử dụng điều này với tham số SqlCommand
/, vì khi bạn gán cho tham số, nó sẽ chiếm toàn bộ bộ đệm. Bạn sẽ cần một mảng mới:
byte[] second = new byte[100];
Buffer.BlockCopy(first, firstOffset, second, 0, 100);
param.Value = second;
Câu trả lời ngắn gọn là: KHÔNG. Bất cứ điều gì bạn làm (ngoài việc truyền mảng đó làm tham số) sẽ tạo một mảng mới và sao chép 100 byte đầu tiên trong đó.
Tuy nhiên, vì bạn không chuyển mảng theo giá trị, nhưng thay vì chuyển một tham chiếu đến nó, tại sao nó lại quan trọng với bạn nếu mảng là 256 byte hoặc 100? Bạn không lãng phí nhiều bộ nhớ hơn. Bạn có thể cần phải cho biết phương thức sử dụng mảng đó, tuy nhiên, vì phương thức Length sẽ trả về độ dài đầy đủ.
CHỈNH SỬA: Tôi vừa mới nhận ra rằng bạn muốn chuyển mảng tới một quy trình được lưu trữ. Điều này sẽ sao chép toàn bộ mảng. Bạn sẽ phải tạo một bản sao chỉ với các phần tử bạn muốn chuyển.
- 1. nối thêm một phần của mảng byte java vào StringBuilder
- 2. Phần trên của một mảng .NET?
- 3. C# - cách sao chép một phần của "byte []" sang một mảng khác?
- 4. Sao chép một phần của mảng byte NSData sang một loại NSData khác
- 5. chuyển một mảng byte vào danh sách <Byte>
- 6. Cách so sánh hai hình ảnh sử dụng mảng byte
- 7. Tạo một mảng chỉ tới một phần của mảng khác?
- 8. Làm cách nào để chuyển đổi một phần của một bộ mã vạch python (mảng byte) thành một số nguyên
- 9. Khởi tạo mảng byte unsigned sử dụng hex số
- 10. Nhận một phần của một mảng
- 11. Tính toán SHA-1 của mảng byte
- 12. Sử dụng XmlSerializer với một mảng trong phần tử gốc
- 13. Smarty: in một phần tử cụ thể của một mảng KHÔNG sử dụng vòng lặp foreach
- 14. C++: kích thước của một mảng char sử dụng sizeof
- 15. tạo bộ nhớ cache của mảng byte
- 16. Bộ nhớ miễn phí của một mảng byte trong Java
- 17. MemoryStream và xây dựng một mảng byte
- 18. Tìm một mảng (byte []) bên trong một mảng khác?
- 19. C++ Xóa một phần của mảng động
- 20. Đọc một mảng C# byte trong Java
- 21. Chèn một mảng byte vào một mảng byte khác tại một vị trí cụ thể với C#
- 22. chuyển đổi mảng chuỗi thành mảng byte
- 23. Xoay một mảng byte YUV trên Android
- 24. Cắt mảng byte trong Java
- 25. mảng byte thành pdf
- 26. Thêm các phần tử của một mảng
- 27. Serialize/Deserialize một mảng byte trong JSON.NET
- 28. Khai báo một mảng byte trong VB.NET
- 29. Lô mảng byte Android
- 30. C - phần tử nằm ngoài phần đầu của một mảng
Tôi quá lười biếng để kiểm tra - nhưng điều đó thực sự KHÔNG chỉ sao chép mảng vào một mảng mới có kích thước 100? –
Đồng ý với Andrew. Điều này nên được kiểm tra kỹ. –
Các tài liệu nêu rõ phương thức sử dụng thực thi hoãn lại, truy vấn được biểu diễn không được thực hiện cho đến khi đối tượng được liệt kê bằng GetEnumerator hoặc foreach. Lấy (src) liệt kê nguồn và tạo ra các phần tử cho đến khi các phần tử đếm được sinh ra hoặc src không chứa các phần tử nào khác. Vì vậy, tôi đoán nó không sao chép. – Jeremy