Вопрос

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

Это было полезно?

Решение

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

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) ) { 
  ...
}

Другие советы

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

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

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

foreach (int item in theArray) {
   // use the item variable to access the element
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top