2011-08-26 14 views
17

Jaka jest różnica między tymi dwiema metodami i kiedy używałbyś jednego zamiast drugiego?Różnica między array.GetLength (0) i array.GetUpperBound (0)

int[,] array = new int[4,3]; 
int length0 = array.GetLength(0); 
int upperbound0 = array.GetUpperBound(0); 

MSDN mówi, że GetLength zwraca liczbę elementów, gdzie jako GetUpperBound określenia indeksu max, ale jak to może być inna od tablice są inicjowane z elementami dla każdego indeksu?

+4

Zakładasz, że dolne ograniczenie jest zawsze zero. Nie jest. –

Odpowiedz

31

Spójrz w tym sposobie (rzadko używane). Od MSDN:

public static Array CreateInstance(Type elementType, int[] lengths, int[] lowerBounds)

Tworzy wielowymiarową tablicę określonych długościach typ i wymiary, z podanych dolnych granicach.

Za jego pomocą można utworzyć tablicę z indeksami od -5 ... +5. Jeśli kiedykolwiek użyjesz tego rodzaju tablicy, nagle staje się ona znacznie bardziej użyteczna niż GetLength()-1. Istnieje również GetLowerBound().

Jednak obsługa C# dla tego rodzaju tablic jest niska, potrzebne byłyby tylko te metody w połączeniu z metodami Array.GetValue()/SetValue().

+1

"ale proszę, nie rób tego". Dlaczego nie, jeśli jesteś pewien granic twojej sieci? – Epiplon

+2

Używałbym tego tylko wtedy, gdy nie jestem pewien granic. –

7

Array.Length zwraca długość tablicy (liczba elementów), którą potrzebujesz , aby odjąć 1 od niej, aby uzyskać UpperBound.

Array.GetUpperBound(0) zwraca górną granicę tablicy, możesz użyć jej jako .

2

GetUpperBound zwraca najwyższy indeks w tablicy, GetLength zwraca liczbę elementów tablicy.

tj GetUpperBound = GetLength - 1

+3

Zwykle. Ale nie dlatego tak jest. –

+0

+1 do twojej odpowiedzi, nie wiedziałem, że możesz zacząć tablicę w indeksie innym niż 0! –

1

Ogólnie rzecz biorąc, array.GetUpperBound(0) = array.Length - 1, ale ponieważ możemy tworzyć tablice z dolną granicą niezerową, nie zawsze jest to prawda.

0

Jeśli dolna granica twojej tablicy wynosi 0, możesz użyć dowolnego z nich bez żadnego pomyłki, ale polecam array.length-1, ponieważ jest on powszechnie używany. Jeśli jednak dolna granica twojej tablicy jest mniejsza od 0, powinieneś użyć array.GetUpperBound (0), ponieważ w tym przypadku array.length-1! = array.getUpperBound (0)

Powiązane problemy