Как обработать исключение IndexOutOfRangeException?

453
08 июня 2017, 04:51

В задании указано создать 2 класса: в 1-ом создать и проинициализировать массив из 10 элементов типа int, конструктор по умолчанию и индексатор; во 2-ом классе - Main, в котором продемонстрировать ситуацию выхода за границы массива. Перехватить и обработать нужно исключение в индексаторе. Помогите, как перехватить исключение ?

    class B
{
    private int[] a = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    public int this[int i]
    {
        get { if (i >= 0 && i <= 10) return a[i]; else throw new IndexOutOfRangeException(); }
        set { if (i >= 0 && i <= 10) a[i] = value; else throw new IndexOutOfRangeException(); }
    }
}
class MainClass
{
    public static void Main(string[] args)
    {
            B bi = new B();
            for (int i = 0; i <= 10; i++)
            {Console.WriteLine(bi[i]);}
    }
}
Answer 1
get 
{
  try 
  {
    return a[i];
  }
  catch(IndexOutOfRangeException ex) 
  {
    // handle exception
    return 0;
  }
}
Answer 2

Ну, если нужно так "Перехватить и обработать нужно исключение в индексаторе.", то тогда можно так:

class ThingIndexer
{
    private string[] _words;
    //ctor
    public ThingIndexer()
    {
        _words = new string[] { "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "десять" };
    }
    public string this[int index]
    {
        get
        {
            try
            {
                return _words[index];
            }
            catch (IndexOutOfRangeException)
            {
                return "Ошибка в индексе";
            }
        }
    }
}
class MainClass
{
    private int _start;
    private int _end;
    //ctor
    public MainClass(int start = 0, int end = 1)
    {
        _start = start;
        _end = end;
    }
    public IEnumerable<string> GetNumbers()
    {
        ThingIndexer tIndexer = new ThingIndexer();
        for (int i = _start; i < _end; i++)
        {
            yield return tIndexer[i];
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        MainClass mc = new MainClass(4, 15);
        foreach (var item in mc.GetNumbers())
        {
            Console.WriteLine(item);
        }

        Console.ReadKey();
    }
}

В результате получим:

пять шесть семь восемь девять десять Ошибка в индексе Ошибка в индексе Ошибка в индексе Ошибка в индексе Ошибка в индексе

P.S для вашего случая: ...проинициализировать массив из 10 элементов типа int,... нужно переделать совсем немного :)

READ ALSO
System.ArgumentOutOfRangeException: &#39;minValue не может быть больше maxValue.&#39;

System.ArgumentOutOfRangeException: 'minValue не может быть больше maxValue.'

Только учусь программированию и столкнулся с вот такой проблемой:

289
Метод шифрования гаммированием

Метод шифрования гаммированием

Добрый деньЯ реализовывал шифрование в лабораторной работе на языке c# методом гаммирования, в моей реализации значения складываются по модулю...

666
C# — Из-за чего нестабильный &#171;Random&#187;?

C# — Из-за чего нестабильный «Random»?

Возникла проблема с функцией "Random"Иногда не выводит результат

304
Как програмно прокрутить ScroolBar в ListBox в конец списка

Как програмно прокрутить ScroolBar в ListBox в конец списка

Как програмно прокрутить ScroolBar в ListBox в конец списка

398