从powershell调用C#方法而不提供可选参数

irh*_*irh 5 c# powershell optional-parameters

我有一个ac#方法我从dll加载默认的可选字符串参数null.例如

public void foo(string path, string new_name = null, bool save_now = true)
{
    if(name == null)
        new_name = Path.GetFileNameWithoutExtension(path);
    ...
    if(save_now)
       Save();
}
Run Code Online (Sandbox Code Playgroud)

我想在一个powershell脚本中调用它,而不是为new_name一个for 提供一个值save_now.根据这个看似非常相似的问题,我试过了

$default = [type]::Missing
$obj.foo($path, $default, $false)
Run Code Online (Sandbox Code Playgroud)

但这导致new_name被设置"System.Reflection.Missing"在函数内.

另外我试过了

$obj.foo($path, $null, $false)
Run Code Online (Sandbox Code Playgroud)

但这会导致new_name设置为空字符串,但仍然没有null.我可以将默认设置为空字符串,但我想知道是否有任何好方法可以使用默认值.

Kei*_*ill 5

在PowerShell中无法做到.它不支持C#/ VB可选参数.调用该方法的语言有责任在程序员不提供时提供默认值,而PowerShell只是不这样做.