Хорошо,
Может быть, это из-за с # или, может быть, я поступаю неправильно.
Пожалуйста, посмотрите на код, который я имею ниже. Я сделал это, где вы можете скопировать и вставить его в консольное приложение и запустить его, чтобы увидеть, о чем я говорю.
using System;
namespace ConsoleTest
{
class Program
{
static void Main()
{
var o1 = new oObject
{
Name = "Before Method"
};
var o1b = new oObjectBad
{
Name = "Before Method"
};
Console.WriteLine("Object Bad 1 Before: " + o1b.Name);
oObjectBad o2b = GetNewObjectBad(o1b);
Console.WriteLine("Object Bad 1 After: " + o1b.Name);
Console.WriteLine("Object Bad 2 After: " + o2b.Name);
Console.WriteLine(string.Empty);
Console.WriteLine("Object 1 Before: " + o1.Name);
oObject o2 = GetNewObject(o1);
Console.WriteLine("Object 1 After: " + o1.Name);
Console.WriteLine("Object 2 After: " + o2.Name);
Console.ReadLine();
}
public static oObject GetNewObject(oObject o)
{
oObject newObject = new oObject(o);
newObject.Name = "Changed in Method";
return newObject;
}
public static oObjectBad GetNewObjectBad(oObjectBad o)
{
o.Name = "Changed in Method";
return o;
}
}
class oObject
{
public oObject()
{
}
public oObject(oObject o)
{
Name = o.Name;
}
public string Name { get; set; }
}
class oObjectBad
{
public string Name { get; set; }
}
}
Теперь вот что я не понимаю.
Когда я передаю объект методу и обновляю свойство объекта «Имя». Затем он обновляет исходный объект, который находится за пределами метода.
Обходным путем было создание другого объекта (как показано в коде), чтобы сделать клон объекта, а затем обновить его и затем вернуть клон.
Итак, вопрос в следующем:
Есть ли более простой способ передать объект и обновить свойства этого объекта, чтобы я мог получить что-то подобное без обновления исходного объекта.
using System;
namespace ConsoleTest
{
class Program
{
static void Main()
{
var o1 = new oObject
{
Name = "Before Method"
};
Console.WriteLine("Object 1 Before: " + o1.Name);
oObject o2 = GetNewObjectBad(o1);
Console.WriteLine("Object 1 After: " + o1.Name);
Console.WriteLine("Object 2 (New Object) After: " + o2.Name);
Console.ReadLine();
}
public static oObject GetNewObjectBad(oObject o)
{
o.Name = "Changed in Method";
return o;
}
}
class oObject
{
public string Name { get; set; }
}
}
Если это сбивает с толку, дайте мне знать, и я посмотрю, смогу ли я объяснить лучше.
EDIT:
Причина, по которой я это делаю, заключается в том, что мне нужно клонировать объект в базе данных, а клонированному объекту необходимо изменить несколько свойств. Затем я буду использовать идентификатор исходного объекта и нового объекта для другой обработки данных.
Спасибо!