Trước tiên, hãy để tôi mở đầu câu trả lời này bằng cách giải thích trường hợp sử dụng của tôi: Excel Interop. Nó dễ dàng hơn nhiều để đọc và ghi dữ liệu bằng cách sử dụng mảng, nhưng Excel Range.Value2 kỳ diệu trả về một mảng đối tượng dựa trên 1.
Vì vậy, nếu bạn đang viết thư cho Excel và đó là lý do bạn đặt câu hỏi này ngay từ đầu ... thì có lẽ dừng chiến đấu C# và để Excel khởi tạo mảng cho bạn. Vì vậy, thay vì:
object[,] newArray = new object[indexR, indexC];
Bạn có thể sử dụng:
object[,] newArray = (object[,])RangeToWriteTo.Value2;
Trong trường hợp của tôi, tôi đã tạo ra một lớp wrapper để cho phép tôi sử dụng một mảng cho các thuộc tính như sau:
public abstract class ExcelRowBase
{
public object[,] data;
public ExcelRowBase(int index)
{
data = new object[2, index + 1];
}
}
public class InstanceRowModel : ExcelRowBase
{
public InstanceRowModel() : base(8)
{
//constructor unique to Wire Table
}
public object Configuration
{
get
{
return data[1, 1];
}
set
{
data[1, 1] = value;
}
}
...
Vì vậy, trong mọi trường hợp, tôi đang đọc từ cùng một chỉ mục. Vì vậy, để thực hiện chuyển đổi từ một mô hình tôi đang đi vào một phương pháp tạo, tôi chỉ cần sao chép các thuộc tính vào mô hình sử dụng mảng được tạo ra từ Excel.
insertingModel.data = (object[,])writeRange.Value2;
//manually copying values from one array to the other
insertingModel.Configuration = model.Configuration;
...
writeRange.Value2 = insertingModel.data;
Điều này làm việc cho tôi vì tôi chỉ phải thực hiện việc này trong chức năng tạo. Trong bản cập nhật/get/delete, bạn sẽ nhận được mảng dựa trên Excel. Có lẽ một cải tiến trong tương lai sẽ là tạo ra một nhà máy sản xuất phạm vi Excel tránh được việc xây dựng mặc định dựa trên 0, nhưng giải pháp này chỉ cho tôi thử nghiệm trên các thử nghiệm của tôi, vì vậy tôi đang tiếp tục!
Tại sao bạn muốn? – Eric
@Eric Tôi sẽ nói lý do tại sao, trong năm đầu tiên ở trường đại học, sinh viên học Pascal và lập chỉ mục ở đây bắt đầu từ 1 nên họ hỏi họ có thể làm điều tương tự với C# (chỉ là câu hỏi) không. –
Còn 0,5? :) –