Передача массива структур в функцию - 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
}