根据其他参数设置可选参数默认值

时间:2018-09-20 12:13:38

标签: c# optional-parameters

我想实现以下方案:

方法:

public void Process(Request request, string statusCode=request.statusCode, string statusVal=request.statusVal) 
{ 
... 
}

显然以上构造在C#中不起作用。

因此,在这种情况下,方法过程将使用3个参数,其中调用参数可能会或可能不会在参数中传递statusCode和/或statusVal。

当不传递值时,应将请求对象中的值作为默认值。简而言之,可选参数的默认值可以是动态的,还是可以基于其他强制性参数。

2 个答案:

答案 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或使用特定的statusCodestatusVal调用方法,并且两者将具有相同的逻辑。

有关更多信息,请查看C# in Depth: Overloading