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

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

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

Есть следующие структуры:
Листинг программы
  1. public struct Gorod
  2. {
  3. public bool Otgr;
  4. public string Oblast;
  5. public Zakaz[] ZakazMas;
  6. public DateTime DataDost;
  7. public bool OnTime;
  8. }
  9. public struct Zakaz
  10. {
  11. public string CodeTovar;
  12. public long Count;
  13. public long CountDost;
  14. public double Ves;
  15. public double Persent;
  16. }
Далее заполняю массив структуры Gorod, и передаю его в функцию, в которой изменяю значения структуры, но после завершения функции, значения передаваемого массива так же изменяются, видимо передается он по ссылке а не по значению. Как то можно это исправить? Пока решил проблему копией исходного массива внутри функции, но это какой то костыль.

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

textual
Листинг программы
  1.     class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             var ar = new Test[]
  6.                      {
  7.                          new Test
  8.                          {
  9.                              TestString = "First",
  10.                              Value = 1
  11.                          },
  12.                          new Test
  13.                          {
  14.                              TestString = "Second",
  15.                              Value = 2
  16.                          },
  17.                          new Test
  18.                          {
  19.                              TestString = "Third",
  20.                              Value = 3
  21.                          }
  22.                      };
  23.             Console.WriteLine("Исходный массив");
  24.             Console.WriteLine(string.Join(Environment.NewLine, ar));
  25.  
  26.             SomeFunc(ar);
  27.             Console.WriteLine("После функции без изменения элементов");
  28.             Console.WriteLine(string.Join(Environment.NewLine, ar));
  29.  
  30.             SomeFunc(ar, true);
  31.             Console.WriteLine("После функции с изменением элементов");
  32.             Console.WriteLine(string.Join(Environment.NewLine, ar));
  33.             Console.Read();
  34.         }
  35.  
  36.         private static void SomeFunc(Test[] newTest, bool change = false)
  37.         {
  38.             for (var i = 0; i < newTest.Length; i++)
  39.             {
  40.                 if (change)
  41.                 {
  42.                     newTest[i].Value *= 10;
  43.                 }
  44.                 else
  45.                 {
  46.                     var item = newTest[i];
  47.                     item.Value *= 10;
  48.                 }
  49.             }
  50.         }
  51.     }
  52.  
  53.     struct Test
  54.     {
  55.         public string TestString { get; set; }
  56.         public int Value;
  57.  
  58.         #region Overrides of ValueType
  59.  
  60.         public override string ToString()
  61.         {
  62.             return string.Format("TestString = {0}; Value = {1}", TestString, Value);
  63.         }
  64.  
  65.         #endregion
  66.     }

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


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

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

12   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы