При вызове метода меняются передаваемые данные - C#
Формулировка задачи:
Добрый день, не могу разобраться. При вызове ArrayUtils.CopyInsert(99, 2, nums, nums2, str); мы передаем 2 целых значения, 2 массива и строку. Если в самом методе мы меняем массив, то значения сохраняются и за пределами данного метода, но если мы меняем значение строки, то за пределами метода, она не остается как была. Если я не ошибаюсь, то значения, которые передаются в метод (кроме ссылочных) и были изменены, не изменяться после выхода из метода.
На выходе получаем:
Contents of nums: 1 2 3
Contents of nums: 777 2 3
Contents of nums2: 777 2 99 3
str = string test
Как видно в методе был изменен массив и он сохранился потом, а строка не сохранилась.
using System; class ArrayUtils { public static bool CopyInsert(int e, uint idx, int[] src, int[] target, string aa) { aa = "TEST"; // меняем строку src[0] = 777; // меняем массив if (target.Length < src.Length + 1) return false; for (int i = 0, j = 0; i < src.Length; i++, j++) { if (i == idx) { target[j] = e; j++; } target[j] = src[i]; } return true; } } class GenMethDemo { static void Main() { int[] nums = { 1, 2, 3 }; int[] nums2 = new int[4]; string str = "string test"; // Display contents of nums. Console.Write("Contents of nums: "); foreach (int x in nums) Console.Write(x + " "); Console.WriteLine(); // Operate on an int array. ArrayUtils.CopyInsert(99, 2, nums, nums2, str); Console.Write("Contents of nums: "); foreach (int x in nums) Console.Write(x + " "); Console.WriteLine(); // Display contents of nums2. Console.Write("Contents of nums2: "); foreach (int x in nums2) Console.Write(x + " "); Console.WriteLine(); Console.WriteLine("str = " + str); Console.WriteLine(); } }
Решение задачи: «При вызове метода меняются передаваемые данные»
textual
Листинг программы
using System; class ArrayUtils { public static bool CopyInsert(int e, uint idx, int[] src, int[] target, ref string aa) { aa = "TEST"; // меняем строку src[0] = 777; // меняем массив if (target.Length < src.Length + 1) return false; for (int i = 0, j = 0; i < src.Length; i++, j++) { if (i == idx) { target[j] = e; j++; } target[j] = src[i]; } return true; } } class GenMethDemo { static void Main() { int[] nums = { 1, 2, 3 }; int[] nums2 = new int[4]; string str = "string test"; // Display contents of nums. Console.Write("Contents of nums: "); foreach (int x in nums) Console.Write(x + " "); Console.WriteLine(); // Operate on an int array. ArrayUtils.CopyInsert(99, 2, nums, nums2, ref str); Console.Write("Contents of nums: "); foreach (int x in nums) Console.Write(x + " "); Console.WriteLine(); // Display contents of nums2. Console.Write("Contents of nums2: "); foreach (int x in nums2) Console.Write(x + " "); Console.WriteLine(); Console.WriteLine("str = " + str); Console.WriteLine(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д