2016-01-17 83 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();並將改變正確的屬性將不會改變外面。