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

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

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

Листинг программы
  1. MethodInfo[] mii = t.GetMethods();
  2. foreach (MethodInfo m1 in mii)
  3. {
  4. ParameterInfo[] pi = m1.GetParameters();
  5. if (m1.Name == "sum")
  6. {
  7. int val;
  8. val = (int)m1.Invoke(ReflectOb, null);
  9. Console.WriteLine(val);
  10. }
  11. else if ((m1.Name.CompareTo("set") == 0) && (pi[0].ParameterType==typeof(int)))
  12. {
  13. object[] ob = new object[2];
  14. ob[0] = 12;
  15. ob[1] = 18;
  16. m1.Invoke(ReflectOb, ob);
  17. }
  18. else if ((m1.Name.CompareTo("set") == 0) & (pi[0].ParameterType==typeof(double))) ////////////////////////////////<---Здесь вылетает ошибка из-за оператора &, почему?
  19. {
  20. Console.WriteLine("Параметр1 " + pi[0].ParameterType.Name+" Параметр 2 "+pi[0].ParameterType.Name);
  21. object[] ob = new object[2];
  22. ob[0] = 1.12;
  23. ob[1] = 23.4;
  24. m1.Invoke(ReflectOb, ob);
  25. }
  26. else if (m1.Name == "isBetween")
  27. {
  28. object[] ob = new object[1];
  29. ob[0] = 19;
  30. if ((bool)m1.Invoke(ReflectOb, ob)) Console.WriteLine(ob + "находится по середине");
  31. else Console.WriteLine(ob + "Находится за пределами ");
  32. }
  33.  
  34. else if (m1.Name.CompareTo("show") == 0){
  35. m1.Invoke(ReflectOb, null);
  36. }
  37. }
  38. Console.ReadKey();
  39. }
  40. }
В месте где закоменнтировано вылетает ошибка IndexOutOfRange, если поставить вместо & оператор && то все будет ок. Кто нибудь сможет объяснить почему так происходит?? Вроде бы одно и то же должно быть как с оператором & так и с оператором &&.

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

textual
Листинг программы
  1. MethodInfo[] mii = t.GetMethods();
  2.  
  3.             foreach (MethodInfo m1 in mii)
  4.             {
  5.                 switch(m1.Name)
  6.                 {
  7.                     case "sum":
  8.                         int val;
  9.                         val = (int)m1.Invoke(ReflectOb, null);
  10.                         Console.WriteLine(val);
  11.                         break;
  12.                     case "isBetween":
  13.                         object[] ob = new object[1];
  14.                         ob[0] = 19;
  15.                         if ((bool)m1.Invoke(ReflectOb, ob)) Console.WriteLine(ob + "находится по середине");
  16.                         else Console.WriteLine(ob + "Находится за пределами ");
  17.                         break;
  18.                     case "show":
  19.                         m1.Invoke(ReflectOb, null);
  20.                         break;
  21.                     case "set":
  22.                         ParameterInfo[] pi = m1.GetParameters();
  23.                         if (pi[0].ParameterType == typeof(int))
  24.                         {
  25.                             object[] ob = new object[2];
  26.                             ob[0] = 12;
  27.                             ob[1] = 18;
  28.                             m1.Invoke(ReflectOb, ob);
  29.                             continue;
  30.                         }
  31.                         if (pi[0].ParameterType == typeof(double))
  32.                         {
  33.                             Console.WriteLine("Параметр1 " + pi[0].ParameterType.Name + " Параметр 2 " + pi[0].ParameterType.Name);
  34.                             object[] ob = new object[2];
  35.                             ob[0] = 1.12;
  36.                             ob[1] = 23.4;
  37.                             m1.Invoke(ReflectOb, ob);
  38.                         }
  39.                         break;
  40.                     default: break;
  41.                 }
  42.             }

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


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

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

5   голосов , оценка 4.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы