[英]C# dynamic parameter of a function changes it return type
一个简单的代码
dynamic v = "";
var a = F("");
var b = F(v);
static bool F(dynamic o) => true;
变量a的类型是bool,但是b是动态的而不是bool,为什么?
简短的回答是,一旦您声明了dynamic
, dynamic
“行为”(?)将继续通过所有未来的引用传播,直到您明确解决它。
并不是F(o)
的返回类型发生了变化,而是编译器根本不在乎。
dynamic
变量的声明已禁用编译时对该变量的所有引用的类型检查......再次,直到(或除非)它被明确解决。
但是,我期待阅读其他解释。
对于有效的 C# 编译器,“变量 a 的类型是 bool,但 b 是动态而不是 bool”的初始断言是不正确的,也没有用代码说明。
以下程序将无法编译,表明 b 确实是一个bool
见https://dotnetfiddle.net/E6fn0P运行代码。
using System;
public class Program
{
public static void Main()
{
static bool F(dynamic o) => true;
dynamic v = "";
var a = F("");
var b = F(v);
_ = b.Foo;
Console.WriteLine("Hello World");
}
}
预期的编译器错误是:
编译错误(第 12 行,第 13 列): “bool”不包含“Foo”的定义,并且找不到接受“bool”类型的第一个参数的可访问扩展方法“Foo”(您是否缺少 using 指令或装配参考?)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.