Bir C# yönteminden, bir dll'den, null
için varsayılan olan isteğe bağlı dize bağımsız değişkenleri ile yüklüyorum. Örneğinisteğe bağlı argümanlar sağlamadan powershell'den C# yöntemini çağırı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();
}
olsa hemen powershell komut dosyası içinden bu arayıp new_name
ama save_now
için biri için bir değer sağlamamaktadır istiyorum. this seemingly very similar question gereğince ben
$default = [type]::Missing
$obj.foo($path, $default, $false)
denedi ama
new_name
bu sonuçları fonksiyonu içinde
"System.Reflection.Missing"
olarak ayarlanmıştır.
Ayrıca ben
$obj.foo($path, $null, $false)
çalıştı ama
new_name
bu sonuçlar hala boş bir dizeye
null
değil ayarlanmıştır. Varsayılanı boş dizeye ayarlayabilirdim, ancak aslında varsayılan değerin kullanılmasının iyi bir yolu olup olmadığını merak ediyordum.
Eminim ki bunu yansıma ile yapacak bir şey inşa edebilirsiniz. GetMethod, bir 'GetProperty' yöntemine sahip bir 'MethodInfo' döndürür. DefaultValue, HasDefaultValue ve IsOptional' özelliklerine sahip bir 'ParameterInfo' döndürür. Böylece bir PS işlevi geliştirebilir, VB'nin desteklediği şeyleri taklit eden "InvokeWithNamedParameters" deyin. –
İlginç bir fikir. Benim için maalesef bu çözümü deneyen pencere geçti, ama belki de aynı soruya sahip bir başkası bu uygulanabilir bir teknik bulacaktır. – irh