PowerShell メソッドのオーバーロード解決システムが C# と一致していないようです
比較してみましょう
C#
class Program
{
static void Main(string[] args)
{
MyClass.MyMethod(false, DateTime.Now);
}
}
public static class MyClass
{
public static void MyMethod(object obj, DateTime dateTime)
{
Console.WriteLine("MyClass.MyMethod(object obj, DateTime dateTime)");
}
public static void MyMethod(bool b, string str)
{
Console.WriteLine("MyClass.MyMethod(bool b, string str)");
}
}
対
パワーシェル
Add-Type `
@"
using System;
public static class MyClass
{
public static void MyMethod(object obj, DateTime dateTime)
{
Console.WriteLine("MyClass.MyMethod(object obj, DateTime dateTime)");
}
public static void MyMethod(bool b, string str)
{
Console.WriteLine("MyClass.MyMethod(bool b, string str)");
}
}
"@
[MyClass]::MyMethod($false, [DateTime]::Now)
C# が返されます
MyClass.MyMethod(object obj, DateTime dateTime)
私たちが期待した方法
しかし、PowerShell は戻ってきます
MyClass.MyMethod(bool b, string str)
正しいメソッドを呼び出したい場合は、呼び出したいオーバーロードについてより明確にする必要があります
[MyClass]::MyMethod([object] $false, [DateTime]::Now)
機能ではなく、PowerShell のバグだと思います
上記のコードは PowerShell 3 でテストされました
PowerShell 2 では、状況はさらに悪化します。適切なオーバーロードを呼び出す方法が見つかりませんでした
これでもうまくいかない
[MyClass]::MyMethod([object] $false, [DateTime] ([DateTime]::Now))