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

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

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

Добрый день, не могу разобраться. При вызове ArrayUtils.CopyInsert(99, 2, nums, nums2, str); мы передаем 2 целых значения, 2 массива и строку. Если в самом методе мы меняем массив, то значения сохраняются и за пределами данного метода, но если мы меняем значение строки, то за пределами метода, она не остается как была. Если я не ошибаюсь, то значения, которые передаются в метод (кроме ссылочных) и были изменены, не изменяться после выхода из метода.
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();
    }
}
На выходе получаем: Contents of nums: 1 2 3 Contents of nums: 777 2 3 Contents of nums2: 777 2 99 3 str = string test Как видно в методе был изменен массив и он сохранился потом, а строка не сохранилась.

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

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();
    }
}

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


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

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

9   голосов , оценка 3.556 из 5
Похожие ответы