[英]call C# method from powershell without supplying optional arguments
我有 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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.