En primer lugar, déjame aclarar esta respuesta explicando mi caso de uso: Excel interoperabilidad. Es mucho más fácil leer y escribir datos utilizando matrices, pero Excel Range.Value2 devuelve mágicamente una matriz de objetos basada en 1.
Entonces, si está escribiendo en Excel y esa es la razón por la que está haciendo esta pregunta en primer lugar ... entonces quizás deje de pelear contra C# y permita que Excel haga una instancia de la matriz por usted. Así que en lugar de:
object[,] newArray = new object[indexR, indexC];
Se puede utilizar:
object[,] newArray = (object[,])RangeToWriteTo.Value2;
En mi caso, he creado una clase de contenedor para permitir que utilice una matriz para las propiedades de este modo:
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;
}
}
...
Entonces, en todos los casos, estoy leyendo desde el mismo índice. Entonces, para hacer la transición de un modelo que paso a un método Create, solo necesito copiar las propiedades en el modelo que usa la matriz creada desde Excel.
insertingModel.data = (object[,])writeRange.Value2;
//manually copying values from one array to the other
insertingModel.Configuration = model.Configuration;
...
writeRange.Value2 = insertingModel.data;
Esto funciona para mí por ahora porque solo tengo que hacer esto en la función de creación. En update/get/delete, de todos modos obtendrá la matriz basada en Excel. Tal vez una mejora futura sería crear una fábrica de rango Excel que evite la construcción predeterminada basada en 0, pero esta solución solo me dio verdes en mis pruebas, ¡así que sigo adelante!
¿Por qué le gustaría? – Eric
@Eric Diré por qué, en el primer año en nuestra universidad, los estudiantes toman Pascal y la indexación aquí comienza desde 1, así que preguntaron si pueden hacer lo mismo con C# (solo una pregunta). –
¿Qué hay de 0.5? :) –