我想实现以下方案:
方法:
public void Process(Request request, string statusCode=request.statusCode, string statusVal=request.statusVal)
{
...
}
显然以上构造在C#中不起作用。
因此,在这种情况下,方法过程将使用3个参数,其中调用参数可能会或可能不会在参数中传递statusCode和/或statusVal。
当不传递值时,应将请求对象中的值作为默认值。简而言之,可选参数的默认值可以是动态的,还是可以基于其他强制性参数。
答案 0 :(得分:4)
以下是您如何使用可选参数的说明:
public void Process(Request request, string statusCode = null, string statusVal= null)
{
statusCode = statusCode ?? request.statusCode;
statusVal = statusVal ?? request.statusVal;
...
}
现在您可以通过以下任何一种方式称呼它:
Process(request);
Process(request, "code");
Process(request, "code", "val");
Process(request, statusCode: "code");
Process(request, statusVal: "val");
答案 1 :(得分:2)
您不能使用像这样的可选参数。这就是为什么我建议重载该方法的原因。可能看起来像这样。
public void Process(Request request)
{
Process(request, request.statusCode, request.statusVal);
}
public void Process(Request request, string statusCode, string statusVal)
{
//your logic
}
在这种情况下,您可以仅使用Request
或使用特定的statusCode
和statusVal
调用方法,并且两者将具有相同的逻辑。
有关更多信息,请查看C# in Depth: Overloading