Pergunta

É possível em c # para inicializar uma matriz, por exemplo, subíndice 1?

Eu estou trabalhando com o Office interoperabilidade, e cada propriedade é um array objeto que começa em 1 (I presuma que foi originalmente programado em VB.NET), e você não pode modificá-lo, você tem que definir a matriz inteira para ele para aceitar as alterações.

Como alternativa Estou clonagem a matriz original, modificando aquele, e defini-lo como um todo quando eu terminar.

Mas, eu queria saber se era possível criar uma nova matriz baseada diferente de zero

Foi útil?

Outras dicas

É possível fazer o que você solicitar ver o código abaixo.

// 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);

Não simplesmente. Mas certamente você pode escrever sua própria classe. Ele teria um array como uma variável privada, eo usuário poderia pensar que seus inícios matriz em 1, mas realmente começa em zero e você está subtraindo 1 a partir de todos os seus acessos de matriz.

Você pode escrever sua própria classe array

Eu não acho que se é possível modificar o índice inicial de matrizes.

Gostaria de criar minha própria matriz usando os genéricos e manipulá-lo dentro.

Basta manter de int const chamado 'offset' com um valor de um, e sempre acrescentar que a sua subscritos em seu código.

Eu não acho que você pode criar zero não matrizes baseados em C #, mas você poderia facilmente escrever uma classe de mensagens publicitárias de sua própria em torno da construído em dados structures.This classe wrapper iria realizar uma instância privada do tipo matriz que você requeridos; sobrecarregando o [] operador de indexação não é permitido, mas você pode adicionar um indexador para uma classe para torná-lo comportar-se como um conjunto indexável, consulte aqui . A função índice que você escreve pode então adicionar (ou subtrair) 1, a todos índice do passado.

Você pode então usar o objeto como se segue, e ele iria se comportar corretamente:

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

Em VB6 você pudesse mudar a matriz para começar com 0 ou 1, então eu acho que VBScript pode fazer o mesmo. Para C #, não é possível, mas você pode simplesmente adicionar valor NULL no primeiro [0] e começar valor real em [1]. Claro, isso é um pouco perigoso ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top