Передача массива структур в функцию - C#

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

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

Есть следующие структуры:
public struct Gorod
    {
        public bool Otgr;
        public string Oblast;
        public Zakaz[] ZakazMas;
        public DateTime DataDost;
        public bool OnTime;
    }
    public struct Zakaz
    {
        public string CodeTovar;
        public long Count;
        public long CountDost;
        public double Ves;
        public double Persent;
    }
Далее заполняю массив структуры Gorod, и передаю его в функцию, в которой изменяю значения структуры, но после завершения функции, значения передаваемого массива так же изменяются, видимо передается он по ссылке а не по значению. Как то можно это исправить? Пока решил проблему копией исходного массива внутри функции, но это какой то костыль.

Решение задачи: «Передача массива структур в функцию»

textual
Листинг программы
    class Program
    {
        static void Main(string[] args)
        {
            var ar = new Test[]
                     {
                         new Test
                         {
                             TestString = "First",
                             Value = 1
                         },
                         new Test
                         {
                             TestString = "Second",
                             Value = 2
                         },
                         new Test
                         {
                             TestString = "Third",
                             Value = 3
                         }
                     };
            Console.WriteLine("Исходный массив");
            Console.WriteLine(string.Join(Environment.NewLine, ar));
 
            SomeFunc(ar);
            Console.WriteLine("После функции без изменения элементов");
            Console.WriteLine(string.Join(Environment.NewLine, ar));
 
            SomeFunc(ar, true);
            Console.WriteLine("После функции с изменением элементов");
            Console.WriteLine(string.Join(Environment.NewLine, ar));
            Console.Read();
        }
 
        private static void SomeFunc(Test[] newTest, bool change = false)
        {
            for (var i = 0; i < newTest.Length; i++)
            {
                if (change)
                {
                    newTest[i].Value *= 10;
                }
                else
                {
                    var item = newTest[i];
                    item.Value *= 10;
                }
            }
        }
    }
 
    struct Test
    {
        public string TestString { get; set; }
        public int Value;
 
        #region Overrides of ValueType
 
        public override string ToString()
        {
            return string.Format("TestString = {0}; Value = {1}", TestString, Value);
        }
 
        #endregion
    }

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


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

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

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