Безопасный элемент доступа к массиву - PullRequest
3 голосов
/ 28 марта 2009

Каков безопасный метод для доступа к элементу массива без выброса IndexOutOfRangeException, что-то вроде TryParse, TryRead, с использованием методов расширения или LINQ?

Ответы [ 3 ]

9 голосов
/ 18 июня 2018

Используйте метод System.Linq ElementAtOrDefault . Он обрабатывает доступ вне допустимого диапазона без исключения. Возвращает значение по умолчанию в случае неверного индекса.

int[] array = { 4, 5, 6 };
int a = array.ElementAtOrDefault(0);    // output: 4
int b = array.ElementAtOrDefault(1);    // output: 5
int c = array.ElementAtOrDefault(-1);   // output: 0
int d = array.ElementAtOrDefault(1000); // output: 0
7 голосов
/ 28 марта 2009

Вы можете использовать следующий метод расширения.

public static bool TryGetElement<T>(this T[] array, int index, out T element) {
  if ( index < array.Length ) {
    element = array[index];
    return true;
  }
  element = default(T);
  return false;
}

Пример:

int[] array = GetSomeArray();
int value;
if ( array.TryGetElement(5, out value) ) { 
  ...
}
0 голосов
/ 28 марта 2009

Если вы хотите безопасно перебрать элементы массива, просто используйте перечислитель:

foreach (int item in theArray) {
   // use the item variable to access the element
}
...