Передача массива структур в функцию - C#
Формулировка задачи:
Есть следующие структуры:
Далее заполняю массив структуры Gorod, и передаю его в функцию, в которой изменяю значения структуры, но после завершения функции, значения передаваемого массива так же изменяются, видимо передается он по ссылке а не по значению. Как то можно это исправить? Пока решил проблему копией исходного массива внутри функции, но это какой то костыль.
Листинг программы
- 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;
- }
Решение задачи: «Передача массива структур в функцию»
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
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д