我有以下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调用。我只更新我返回的响应对象。
我做错了什么?
由于
答案 0 :(得分:14)
这是问题的开始:
ResponseError = request.RequestError;
您有一个Error
对象 - 在该行之后,您的响应和请求都引用同一个对象。请注意Error
是一个类,因此Request.RequestError
和Response.ResponseError
的值是引用。
然后在此处修改对象:
r.ResponseError.ErrorDescription = "New Response Description";
如果您仍然不完全理解,可能需要阅读我的article on references and values。