簡體   English   中英

在不提供可選參數的情況下從 powershell 調用 C# 方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM