2016-01-17 2 views
0

У меня есть вопрос относительно параметров, передаваемых по значению в 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); 

Заранее спасибо :)

+1

Предполагая, что 'Umfrage' - это класс, тогда, хотя вы можете передавать ссылку по значению, это все еще ссылка. Любые изменения, которые вы делаете, будут связаны с тем же объектом, на котором, возможно, также ссылаются другие области вашего кода. –

+0

Большое спасибо, это должно быть так :) Извините, я не узнал, что был уже вопрос вроде моего. –

ответ

0

Параметры функции двух объектов.

Если вы измените какое-либо свойство объекта в этой функции, эти свойства будут изменены вне функции.

Но если в вашей функции вы делаете obj = new Umfrage(); и измените свойства, все свойства не будут изменены снаружи.

Смежные вопросы