我有一个c#方法我从一个带有可选字符串参数的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();
}
我想在一个powershell脚本中调用它,而不是为new_name
提供一个值,而是为save_now
提供一个值。根据{{3}}我已经尝试了
$default = [type]::Missing
$obj.foo($path, $default, $false)
但这会导致new_name
在函数中设置为"System.Reflection.Missing"
。
另外我试过
$obj.foo($path, $null, $false)
但这会导致new_name
设置为空字符串,仍然不是null
。我可以将默认值设置为空字符串,但我想知道是否有任何好方法可以使用默认值。
答案 0 :(得分:5)
在PowerShell中无法做到。它不支持C#/ VB可选参数。调用该方法的语言的职责是在程序员没有提供默认值时,PowerShell就不会这样做。
答案 1 :(得分:4)
您可以简单地省略呼叫中的可选参数。我修改了你的例子在PS中运行它。例如:
$c = @"
public static class Bar {
public static void foo(string path, string new_name = null, bool save_now = true)
{
System.Console.WriteLine(path);
System.Console.WriteLine(new_name);
System.Console.WriteLine(save_now);
}
}
"@
add-type -TypeDefinition $c
[Bar]::Foo("test",[System.Management.Automation.Language.NullString]::Value,$false)
这会生成以下内容
test
False
显式传递测试,null为null且没有输出,并且save_now评估为默认值True。