Question

Est-il possible en c # d'initialiser un tableau dans, par exemple, le sous-index 1?

Je travaille avec interop Office, et chaque propriété est un tableau d'objets qui commence par 1 (je suppose qu'il a été initialement programmé dans VB.NET) et que vous ne pouvez pas le modifier, vous devez définir le tableau entier pour celui-ci. accepter les modifications.

En guise de solution de contournement, je clone le tableau d'origine, le modifie et le configure dans son ensemble lorsque j'ai terminé.

Mais je me demandais s'il était possible de créer un nouveau tableau de base non nulle

Était-ce utile?

La solution

Autres conseils

Il est possible de faire ce que vous demandez, voir le code ci-dessous.

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

Pas simplement. Mais vous pouvez certainement écrire votre propre classe. Il aurait un tableau comme variable privée et l’utilisateur penserait que son tableau commence à 1, mais en réalité il commence à zéro et vous soustrayez 1 à tous ses accès au tableau.

Vous pouvez écrire votre propre classe de tableau

Je ne pense pas s'il est possible de modifier l'index de départ des tableaux.

Je créerais mon propre tableau en utilisant des génériques et le manipulerais à l'intérieur.

Il suffit de garder la constante int nommée 'offset' avec la valeur un et de toujours l'ajouter à vos indices dans votre code.

Je ne pense pas que vous puissiez créer des tableaux à base non nulle en C #, mais vous pourriez facilement écrire votre propre classe wrapper autour des structures de données intégrées. Cette classe wrapper contiendrait une instance privée du type tableau Champs obligatoires; La surcharge de l'opérateur d'indexation [] n'est pas autorisée, mais vous pouvez ajouter un indexeur à une classe pour qu'elle se comporte comme un tableau indexable, voir ici . La fonction d'index que vous écrivez peut ensuite ajouter (ou soustraire) 1 à tous les index transmis.

Vous pouvez ensuite utiliser votre objet comme suit et il se comporterait correctement:

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

Dans VB6, vous pouvez changer le tableau pour qu'il commence par 0 ou 1, donc je pense que VBScript peut faire la même chose. Pour C #, ce n'est pas possible, mais vous pouvez simplement ajouter une valeur NULL dans le premier [0] et commencer la valeur réelle à [1]. Bien sûr, ceci est un peu dangereux ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top