При вызове метода меняются передаваемые данные - 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();
}
}