2016-01-17 59 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();并将改变正确的属性将不会改变外面。