【发布时间】:2014-08-22 15:03:14
【问题描述】:
我有一个 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 提供一个值。按照this seemingly very similar question我试过了
$default = [type]::Missing
$obj.foo($path, $default, $false)
但这会导致在函数内将new_name 设置为"System.Reflection.Missing"。
另外我试过了
$obj.foo($path, $null, $false)
但这会导致new_name 被设置为空字符串,而不是null。我可以将默认值设置为空字符串,但我想知道是否有任何好的方法可以实际使用默认值。
【问题讨论】:
-
我很确定您可以通过反射构建一些东西来做到这一点。
GetMethod返回一个MethodInfo,它有一个GetProperty方法。它返回一个具有DefaultValue, HasDefaultValue, and IsOptional属性的ParameterInfo。所以你可以开发一个 PS 函数,比如模拟 VB 支持的“InvokeWithNamedParameters”。 -
有趣的想法。不幸的是,对我来说,尝试这个解决方案的窗口已经过去了,但也许有同样问题的其他人会发现这是一种可行的技术。
标签: c# powershell optional-parameters