При вызове метода меняются передаваемые данные - 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д