按值传递的参数在函数内仍会更改

本文关键字:函数 参数 按值传递 | 更新日期: 2023-09-27 18:30:39

>我对 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);

提前致谢:)

按值传递的参数在函数内仍会更改

函数参数是两个对象。

如果更改此函数中的某些对象属性,这些属性将在函数外部更改。

但是,如果在您的函数中,您确实这样做 obj = new Umfrage();并将更改属性,所有属性都不会在外面更改。