作者: | 来源:互联网 | 2023-09-23 08:46
从powershell调用C#方法而不提供可选参数我有一个ac#方法我从一个带有可选字符串参数的dll加载,默认为null。例如publicvoidfoo(stringpath,s
从powershell调用C#方法而不提供可选参数
我有一个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(); }
我想在powershell脚本中调用它,而不是为new_name
提供值,而是为save_now
提供一个值。 根据这个看似非常相似的问题,我试过了
$default = [type]::Missing $obj.foo($path, $default, $false)
但这会导致new_name
在函数中被设置为"System.Reflection.Missing"
。
另外我试过了
$obj.foo($path, $null, $false)
但这会导致new_name
设置为空字符串,仍然不为null
。 我可以将默认值设置为空字符串,但我想知道是否有任何好方法可以使用默认值。
在PowerShell中无法做到。 它不支持C#/ VB可选参数。 调用该方法的语言有责任在程序员不提供时提供默认值,而PowerShell只是不这样做。
您可以简单地省略调用中的可选参数。 我修改了你的例子在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。
上述就是C#学习教程:从powershell调用C#方法而不提供可选参数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记