gpt4 book ai didi

c# - 为什么编译器将 var 推断为动态类型而不是具体类型?

转载 作者:太空狗 更新时间:2023-10-29 20:19:25 24 4
gpt4 key购买 nike

给定这个简短的示例程序:

    static void Main(string[] args)
{
Console.WriteLine(Test("hello world"));
}

private static int Test(dynamic value)
{
var chars = Chars(value.ToString());
return chars.Count();
}

private static IEnumerable<char> Chars(string str)
{
return str.Distinct();
}

运行时,会产生类似如下的异常:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ''object' does not contain a definition for 'Count''

意思是编译器选择了dynamic作为首选类型 chars多变的。

它有什么理由不选择IEnumerable<char>吗?作为一个具体的类型,考虑到动态不是从 Chars 返回的方法?只需手动将类型更改为 IEnumerable<char>解决了这个问题,但我想知道为什么 dynamic这种情况下的默认值?

编辑

我可能使用了比必要的更复杂的例子。好像这里问的问题:

Anomaly when using 'var' and 'dynamic'

提供了更简洁的示例和一些关于它为何如此工作的见解。

https://blogs.msdn.microsoft.com/ericlippert/2012/11/05/dynamic-contagion-part-one/

描述编译器如何处理动态。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com