Исправить ошибку IndexOutOfRange в приведенном коде - C#

Узнай цену своей работы

Формулировка задачи:

MethodInfo[] mii = t.GetMethods();
 
        foreach (MethodInfo m1 in mii)
        {
            ParameterInfo[] pi = m1.GetParameters();
            if (m1.Name == "sum")
            {
                int val;
                val = (int)m1.Invoke(ReflectOb, null);
                Console.WriteLine(val);
            }
                else if ((m1.Name.CompareTo("set") == 0) && (pi[0].ParameterType==typeof(int)))
            {
                
                object[] ob = new object[2];
                ob[0] = 12;
                ob[1] = 18;
                m1.Invoke(ReflectOb, ob);
            }
            else if ((m1.Name.CompareTo("set") == 0)  & (pi[0].ParameterType==typeof(double)))   ////////////////////////////////<---Здесь вылетает ошибка из-за оператора &, почему?
            {
                Console.WriteLine("Параметр1 " + pi[0].ParameterType.Name+" Параметр 2 "+pi[0].ParameterType.Name);
                object[] ob = new object[2];
                ob[0] = 1.12;
                ob[1] = 23.4;
                m1.Invoke(ReflectOb, ob);
            }
            
            else if (m1.Name == "isBetween")
            {
                object[] ob = new object[1];
                ob[0] = 19;
                if ((bool)m1.Invoke(ReflectOb, ob)) Console.WriteLine(ob + "находится по середине");
                else Console.WriteLine(ob + "Находится за пределами ");
            }

            else if (m1.Name.CompareTo("show") == 0){
                m1.Invoke(ReflectOb, null);
                }
        }
        Console.ReadKey();
    }
}
В месте где закоменнтировано вылетает ошибка IndexOutOfRange, если поставить вместо & оператор && то все будет ок. Кто нибудь сможет объяснить почему так происходит?? Вроде бы одно и то же должно быть как с оператором & так и с оператором &&.

Решение задачи: «Исправить ошибку IndexOutOfRange в приведенном коде»

textual
Листинг программы
MethodInfo[] mii = t.GetMethods();
 
            foreach (MethodInfo m1 in mii)
            {
                switch(m1.Name)
                {
                    case "sum":
                        int val;
                        val = (int)m1.Invoke(ReflectOb, null);
                        Console.WriteLine(val);
                        break;
                    case "isBetween":
                        object[] ob = new object[1];
                        ob[0] = 19;
                        if ((bool)m1.Invoke(ReflectOb, ob)) Console.WriteLine(ob + "находится по середине");
                        else Console.WriteLine(ob + "Находится за пределами ");
                        break;
                    case "show":
                        m1.Invoke(ReflectOb, null);
                        break;
                    case "set": 
                        ParameterInfo[] pi = m1.GetParameters();
                        if (pi[0].ParameterType == typeof(int))
                        {
                            object[] ob = new object[2];
                            ob[0] = 12;
                            ob[1] = 18;
                            m1.Invoke(ReflectOb, ob);
                            continue;
                        }
                        if (pi[0].ParameterType == typeof(double))
                        {
                            Console.WriteLine("Параметр1 " + pi[0].ParameterType.Name + " Параметр 2 " + pi[0].ParameterType.Name);
                            object[] ob = new object[2];
                            ob[0] = 1.12;
                            ob[1] = 23.4;
                            m1.Invoke(ReflectOb, ob);
                        }
                        break;
                    default: break;
                }
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.8 из 5
Похожие ответы