看来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))