Quelle est la différence entre ces deux méthodes et quand utiliseriez-vous l’une au lieu de l’autre?
int[,] array = new int[4,3];
int length0 = array.GetLength(0);
int upperbound0 = array.GetUpperBound(0);
MSDN indique que GetLength renvoie le nombre d'éléments pour lesquels GetUpperBound détermine l'index maximal, mais en quoi cela pourrait-il être différent puisque les tableaux sont initialisés avec des éléments pour chaque index?
Jetez un oeil à cette méthode (rarement utilisée). De Docs :
public static Array CreateInstance(Type elementType, int[] lengths, int[] lowerBounds)
Crée un tableau multidimensionnel du type et des longueurs de cotes spécifiés, avec les limites inférieures spécifiées.
Avec cela, vous pouvez créer un tableau avec des index de -5 ... +5
. Si vous utilisez ce type de tableau, alors GetUpperBound()
devient soudainement beaucoup plus utile que GetLength()-1
. Il existe également une GetLowerBound()
.
Mais le support C # pour ce type de tableaux est faible, vous ne pouvez pas utiliser []
. Vous n’auriez besoin que de ces méthodes en combinaison avec les méthodes Array.GetValue () et SetValue ().
Array.Length
renvoie la longueur du tableau (nombre d'éléments) dont vous avez besoin pour soustraire 1 de celui-ci pour obtenir le UpperBound.
Array.GetUpperBound(0)
renvoie la limite supérieure du tableau, vous pouvez l'utiliser tel quel.
GetUpperBound
renvoie l'index le plus élevé du tableau, la GetLength
renvoie le nombre d'éléments du tableau.
c'est-à-dire GetUpperBound = GetLength - 1
Généralement, array.GetUpperBound(0) = array.Length - 1
, mais étant donné que nous pouvons créer des tableaux qui ont une limite inférieure Non nulle, cela n’est pas toujours vrai.
Je réalise que c’est une vieille question, mais je pense qu’il est utile de souligner que GetUpperBound renvoie la limite supérieure de la dimension spécifiée. Ceci est important pour un tableau multidimensionnel car dans ce cas, les deux fonctions ne sont pas équivalentes.
// Given a simple two dimensional array
private static readonly int[,] USHolidays =
{
{ 1, 1 },
{ 7, 4 },
{ 12, 24 },
{ 12, 25 }
};
La propriété Length affichera 8 car il y a 8 éléments dans le tableau.
Console.WriteLine(USHolidays.Length);
Cependant, la fonction GetUpperBound () affichera 3 car la limite supérieure de la première dimension est 3. En d'autres termes, je peux effectuer une boucle sur les indices de tableau 0, 1, 2 et 3.
Console.WriteLine(USHolidays.GetUpperBound(0));
for (var i = 0; i <= USHolidays.GetUpperBound(0); i++)
{
Console.WriteLine("{0}, {1}", USHolidays[i, 0], USHolidays[i, 1]);
}
si la limite inférieure de votre tableau est 0, vous pouvez utiliser l'un ou l'autre sans aucune confusion, mais je recommanderais array.length-1, car il est largement utilisé. Toutefois, si la limite inférieure de votre tableau est inférieure à 0, vous devez utiliser array.GetUpperBound (0), car dans ce cas array.length-1! = array.getUpperBound (0).