在c#中使用[可选]参数后如何知道它是否是由调用方法给出的?

use*_*414 3 c# optional-parameters

我想知道参数 b 是否由调用方法提供,以便我可以根据它在方法的定义中对其进行调节。因为这里总是有一个默认值“b”0,但我想区分用户调用 cc(5,0) 和 cc(5)。

有什么办法可以知道吗?

     class Program
        {
            static void Main(string[] args)
            {
               var c= cc(5);
            }
            public static int cc(int a, [Optional] int b)
            {
              int c=0;
            //if(b is provided)
              c = a * b;
            //else()
              c =a*a;    
              return c;
            }
        }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

你不能通过该机制。即使您使用了int? b = null,调用者也可能已明确指定null。要知道,您必须使用重载而不是可选参数,例如:

public static int cc(int a) => cc(a, 0, false);
public static int cc(int a, int b) => cc(a, b, true);
private static int cc(int a, int b, bool bSpecified) // could also use int? here
{...}
Run Code Online (Sandbox Code Playgroud)