C#方法参数错误更新

时间:2017-03-28 15:53:31

标签: c# .net

我有以下C#简单代码:

public class Error
{
    public string ErrorDescription { get; set; }
    public string ErrorCode { get; set; }
}

public class Request
{
    public Error RequestError { get; set; }
}

public class Response
{
    public Error ResponseError { get; set; }
}

public Response Process(Request request)
    {
        var r = new Response
        {
            ResponseError = request.RequestError
        };

        r.ResponseError.ErrorDescription = "New Response Description";

        return r;
    }

我通过控制台应用程序调用Process:

var request = new Request
{
    RequestError = new Error()
    {
        ErrorCode = "Request Error Code",
        ErrorDescription = "Request Error Description"
    }
};

var service = new Service();
var response = service.Process(request);
Debug.WriteLine("request ErrorDescription = " + request.RequestError.ErrorDescription);

为什么request.ResponseError.ErrorDescription等于"新响应描述&#34 ;;我没有更新请求对象,它没有被out / ref调用。我只更新我返回的响应对象。

我做错了什么?

由于

1 个答案:

答案 0 :(得分:14)

这是问题的开始:

ResponseError = request.RequestError;

您有一个Error对象 - 在该行之后,您的响应和请求都引用同一个对象。请注意Error是一个类,因此Request.RequestErrorResponse.ResponseError的值是引用。

然后在此处修改对象:

r.ResponseError.ErrorDescription = "New Response Description";

如果您仍然不完全理解,可能需要阅读我的article on references and values