C# 是";“动态调度”;在.Net Core 3和.Net 4.7.2中的工作方式不同?

C# 是";“动态调度”;在.Net Core 3和.Net 4.7.2中的工作方式不同?,c#,dynamic,C#,Dynamic,下面的代码在dotnetfiddle.net中产生不同的结果。我们也看到了一些不同的测试行为请看图片。有什么想法吗 using System; using System.Collections.Generic; using System.Linq; public class Program { public class Validator<T> { } public static vo

下面的代码在dotnetfiddle.net中产生不同的结果。我们也看到了一些不同的测试行为请看图片。有什么想法吗

using System;
using System.Collections.Generic;                   
using System.Linq;

public class Program
{
    public class Validator<T>
    {
        
    }
    
    public static void Main()
    {
        dynamic instanceValidated = Enumerable.Empty<int>();
        GetValidator(instanceValidated);
        instanceValidated = string.Empty;
        GetValidator(instanceValidated);
    }
    public static Validator<T> GetValidator<T>(IEnumerable<T> _)
    {
        Console.Out.WriteLine("Enumerable Overload " + typeof(T).ToString());
        return new Validator<T>();
    }   
    public static Validator<T> GetValidator<T>(T _)
    {
        Console.Out.WriteLine("Generic Overload " + typeof(T).ToString());
        return new Validator<T>();
    }
    

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
公共课程
{
公共类验证器
{
}
公共静态void Main()
{
dynamic instanceValidated=Enumerable.Empty();
GetValidator(instanceValidated);
instanceValidated=string.Empty;
GetValidator(instanceValidated);
}
公共静态验证器GetValidator(IEnumerable)
{
Console.Out.WriteLine(“可枚举重载”+typeof(T.ToString());
返回新的验证器();
}   
公共静态验证器GetValidator(T)
{
Console.Out.WriteLine(“通用重载”+typeof(T.ToString());
返回新的验证器();
}
}


不,动态调度在版本之间没有变化-希望如此

Enumerable.Empty
的实现在.NET3.0中进行了更改,以优化性能。请检查这些问题,然后单击


博客文章中提到了这一变化,并附带了一个基准测试。

不,动态调度在版本之间没有变化,希望如此

Enumerable.Empty
的实现在.NET3.0中进行了更改,以优化性能。请检查这些问题,然后单击


博客文章中提到了这一变化,并附带了一个基准。

这是正确的答案。为了证明我将测试程序更改为不使用Enumerable.Empty,通过此更改,结果是正确的,并且在Core和.Net 4.71中是相同的。更改在第14行:dynamic instanceValidated=new bool[0];这是正确的答案。为了证明我将测试程序更改为不使用Enumerable.Empty,通过此更改,结果是正确的,并且在Core和.Net 4.71中是相同的。更改在第14行:dynamic instanceValidated=new bool[0];