У меня есть вопрос относительно параметров, передаваемых по значению в C#: Существует функция, которая вызывается для сравнения два сложных объектов «Umfrage» с помощью потока памяти, TeamID должна быть исключена из этого сравнения:Параметры, переданные значением, все еще измененные внутри функции?
public static bool CompareSurveys(Umfrage obj, Umfrage obj1)
{
obj.TeamId = null;
obj1.TeamId = null;
using (MemoryStream memStream = new MemoryStream())
{
if (obj == null || obj1 == null)
{
if (obj == null && obj1 == null)
return true;
else
return false;
}
BinaryFormatter binaryFormatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
binaryFormatter.Serialize(memStream, obj);
byte[] b1 = memStream.ToArray();
memStream.SetLength(0);
binaryFormatter.Serialize(memStream, obj1);
byte[] b2 = memStream.ToArray();
if (b1.Length != b2.Length)
return false;
for (int i = 0; i < b1.Length; i++)
{
if (b1[i] != b2[i])
return false;
}
return true;
}
}
Когда я вызовите метод и передайте параметры по значению, однако TeamId в любом случае имеет значение null. Как это возможно, когда передается только значение?
Survey.TeamId = "1";
Debug.WriteLine(Survey.TeamId);
if (ModelValidator.CompareSurveys(@survey, Survey))
{
return BadRequest("No changes were applied");
}
Debug.WriteLine(Survey.TeamId);
Заранее спасибо :)
Предполагая, что 'Umfrage' - это класс, тогда, хотя вы можете передавать ссылку по значению, это все еще ссылка. Любые изменения, которые вы делаете, будут связаны с тем же объектом, на котором, возможно, также ссылаются другие области вашего кода. –
Большое спасибо, это должно быть так :) Извините, я не узнал, что был уже вопрос вроде моего. –