2008-09-17 53 views
6

Có thể trong C# để khởi tạo một mảng trong, ví dụ, subindex 1 không?Khởi tạo một mảng trên chỉ mục bắt đầu tùy ý trong C#

Tôi đang làm việc với Office interop và mọi thuộc tính là mảng đối tượng bắt đầu bằng 1 (tôi cho rằng ban đầu được lập trình trong VB.NET) và bạn không thể sửa đổi, bạn phải đặt toàn bộ mảng cho nó chấp nhận những thay đổi.

Để giải quyết sự cố, tôi nhân bản mảng ban đầu, sửa đổi mảng đó và thiết lập toàn bộ khi tôi hoàn thành.

Nhưng, tôi đã tự hỏi nếu nó đã có thể tạo ra một mới khác không dựa mảng

+1

vb.net mảng bắt đầu bằng 0, quá. –

+0

Nhưng bạn có thể tạo chúng nếu bạn muốn chúng không (mảng mới (3 đến 5) hoặc một cái gì đó tương tự) – juan

Trả lời

7

Bạn có thể sử dụng Array.CreateInstance.

Xem Array Types in .NET

+0

Tôi thực sự muốn biết nếu nó có thể có cú pháp, nhưng đây là giải pháp tuyệt vời – juan

+0

Vui lòng đưa mã vào câu trả lời của bạn thay vì liên kết tới các tài liệu có thể không tồn tại vào ngày mai . – jordanbtucker

+0

Liên kết bị hỏng .... – kjbartel

0

Bạn có thể viết lớp mảng riêng bạn

-1

Trong VB6 bạn có thể thay đổi mảng bắt đầu với 0 hoặc 1 , vì vậy tôi nghĩ rằng VBScript có thể làm như vậy. Đối với C#, nó không thể nhưng bạn chỉ có thể thêm giá trị NULL vào [0] đầu tiên và bắt đầu giá trị thực tại [1]. Tất nhiên, điều này hơi nguy hiểm ...

+0

Thuộc tính yêu cầu mảng bắt đầu bằng 1, vì vậy điều này sẽ không hoạt động – juan

1

Không đơn giản. Nhưng bạn chắc chắn có thể viết lớp của riêng bạn. Nó sẽ có một mảng như một biến riêng, và người dùng sẽ nghĩ rằng mảng của mình bắt đầu từ 1, nhưng thực sự nó bắt đầu ở số không và bạn trừ 1 từ tất cả các truy cập mảng của mình.

+1

Vâng, bạn luôn có thể làm bất cứ điều gì cho mình ... câu hỏi là nếu nó có thể được thực hiện với cú pháp C# – juan

0

Tôi không nghĩ rằng nếu có thể sửa đổi chỉ mục bắt đầu của mảng.

Tôi sẽ tạo mảng của riêng mình bằng cách sử dụng Generics và xử lý nó bên trong.

0

Chỉ cần giữ const int có tên 'offset' với giá trị là một và luôn thêm nó vào các bảng con của bạn trong mã của bạn.

0

Tôi không nghĩ rằng bạn có thể tạo mảng không bằng không trong C#, nhưng bạn có thể dễ dàng viết lớp bao bọc của riêng bạn xung quanh cấu trúc dữ liệu được tích hợp. Lớp trình bao bọc này sẽ giữ một cá thể riêng của loại mảng bạn yêu cầu; quá tải toán tử lập chỉ mục [] không được phép, nhưng bạn có thể thêm một người lập chỉ mục vào một lớp để làm cho nó hoạt động giống như một mảng có thể lập chỉ mục, xem here. Chức năng chỉ số bạn viết thì có thể thêm (hoặc trừ) 1, cho tất cả của chỉ số thông qua trong

Sau đó, bạn có thể sử dụng đối tượng của bạn như sau, và nó sẽ cư xử một cách chính xác:.

myArrayObject[1]; //would return the zeroth element. 
17

Có thể làm như bạn yêu cầu xem mã dưới đây.

// Construct an array containing ints that has a length of 10 and a lower bound of 1 
Array lowerBoundArray = Array.CreateInstance(typeof(int), new int[1] { 10 }, new int[1] { 1 }); 

// insert 1 into position 1 
lowerBoundArray.SetValue(1, 1); 

//insert 2 into position 2 
lowerBoundArray.SetValue(2, 2); 

// IndexOutOfRangeException the lower bound of the array 
// is 1 and we are attempting to write into 0 
lowerBoundArray.SetValue(1, 0); 
+5

+1: Một khối mã hữu ích trị giá một nghìn liên kết văn xuôi không đọc được * về * mã. –

+0

bất kỳ cách nào để gõ này như int [] thay vì Array? – JJS

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