При вызове метода меняются передаваемые данные - C#

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

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

Добрый день, не могу разобраться. При вызове ArrayUtils.CopyInsert(99, 2, nums, nums2, str); мы передаем 2 целых значения, 2 массива и строку. Если в самом методе мы меняем массив, то значения сохраняются и за пределами данного метода, но если мы меняем значение строки, то за пределами метода, она не остается как была. Если я не ошибаюсь, то значения, которые передаются в метод (кроме ссылочных) и были изменены, не изменяться после выхода из метода.
Листинг программы
  1. using System;
  2. class ArrayUtils
  3. {
  4. public static bool CopyInsert(int e, uint idx,
  5. int[] src, int[] target, string aa)
  6. {
  7. aa = "TEST"; // меняем строку
  8. src[0] = 777; // меняем массив
  9. if (target.Length < src.Length + 1)
  10. return false;
  11. for (int i = 0, j = 0; i < src.Length; i++, j++)
  12. {
  13. if (i == idx)
  14. {
  15. target[j] = e;
  16. j++;
  17. }
  18. target[j] = src[i];
  19. }
  20. return true;
  21. }
  22. }
  23. class GenMethDemo
  24. {
  25. static void Main()
  26. {
  27. int[] nums = { 1, 2, 3 };
  28. int[] nums2 = new int[4];
  29. string str = "string test";
  30. // Display contents of nums.
  31. Console.Write("Contents of nums: ");
  32. foreach (int x in nums)
  33. Console.Write(x + " ");
  34. Console.WriteLine();
  35. // Operate on an int array.
  36. ArrayUtils.CopyInsert(99, 2, nums, nums2, str);
  37. Console.Write("Contents of nums: ");
  38. foreach (int x in nums)
  39. Console.Write(x + " ");
  40. Console.WriteLine();
  41. // Display contents of nums2.
  42. Console.Write("Contents of nums2: ");
  43. foreach (int x in nums2)
  44. Console.Write(x + " ");
  45. Console.WriteLine();
  46. Console.WriteLine("str = " + str);
  47. Console.WriteLine();
  48. }
  49. }
На выходе получаем: Contents of nums: 1 2 3 Contents of nums: 777 2 3 Contents of nums2: 777 2 99 3 str = string test Как видно в методе был изменен массив и он сохранился потом, а строка не сохранилась.

Решение задачи: «При вызове метода меняются передаваемые данные»

textual
Листинг программы
  1. using System;
  2.  
  3. class ArrayUtils
  4. {
  5.     public static bool CopyInsert(int e, uint idx,
  6.                                      int[] src, int[] target, ref string aa)
  7.     {
  8.         aa = "TEST"; // меняем строку
  9.         src[0] = 777; // меняем массив
  10.  
  11.         if (target.Length < src.Length + 1)
  12.             return false;
  13.  
  14.         for (int i = 0, j = 0; i < src.Length; i++, j++)
  15.         {
  16.             if (i == idx)
  17.             {
  18.                 target[j] = e;
  19.                 j++;
  20.             }
  21.             target[j] = src[i];
  22.         }
  23.  
  24.         return true;
  25.     }
  26. }
  27.  
  28. class GenMethDemo
  29. {
  30.     static void Main()
  31.     {
  32.         int[] nums = { 1, 2, 3 };
  33.         int[] nums2 = new int[4];
  34.         string str = "string test";
  35.  
  36.         // Display contents of nums.
  37.         Console.Write("Contents of nums: ");
  38.         foreach (int x in nums)
  39.             Console.Write(x + " ");
  40.  
  41.         Console.WriteLine();
  42.  
  43.         // Operate on an int array.
  44.         ArrayUtils.CopyInsert(99, 2, nums, nums2, ref str);
  45.  
  46.         Console.Write("Contents of nums: ");
  47.         foreach (int x in nums)
  48.             Console.Write(x + " ");
  49.  
  50.         Console.WriteLine();
  51.  
  52.         // Display contents of nums2.
  53.         Console.Write("Contents of nums2: ");
  54.         foreach (int x in nums2)
  55.             Console.Write(x + " ");
  56.  
  57.         Console.WriteLine();
  58.  
  59.         Console.WriteLine("str = " + str);
  60.  
  61.         Console.WriteLine();
  62.     }
  63. }

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


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

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

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

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

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

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