Tôi có phương thức C# Tôi đang tải từ dll với các đối số chuỗi tùy chọn mặc định là null
. Ví dụgọi phương thức C# từ PowerShell mà không cung cấp đối số tùy chọn
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();
}
Tôi muốn gọi này từ bên trong một kịch bản PowerShell và không cung cấp giá trị cho new_name
nhưng một cho save_now
. Theo this seemingly very similar question Tôi đã thử
$default = [type]::Missing
$obj.foo($path, $default, $false)
nhưng kết quả này trong new_name
được thiết lập như "System.Reflection.Missing"
bên trong hàm.
Ngoài ra tôi đã cố gắng
$obj.foo($path, $null, $false)
nhưng kết quả này trong new_name
được thiết lập để các chuỗi rỗng, vẫn không null
. Tôi có thể thiết lập mặc định cho chuỗi rỗng, nhưng tôi đã tự hỏi nếu có bất kỳ cách nào tốt để thực sự có giá trị mặc định được sử dụng.
Tôi khá chắc chắn bạn có thể xây dựng một cái gì đó để làm điều này với sự phản ánh. 'GetMethod' trả về một' MethodInfo', có phương thức 'GetProperty'. Nó trả về một 'ParameterInfo' có các thuộc tính' DefaultValue, HasDefaultValue và IsOptional'. Vì vậy, bạn có thể phát triển một chức năng PS, nói "InvokeWithNamedParameters" mô phỏng những gì VB hỗ trợ. –
Ý tưởng thú vị. Đối với tôi tiếc là cửa sổ để thử giải pháp này đã trôi qua, nhưng có lẽ một người khác với cùng một câu hỏi sẽ thấy đây là một kỹ thuật khả thi. – irh