【发布时间】:2022-01-29 02:59:23
【问题描述】:
一个简单的代码
dynamic v = "";
var a = F("");
var b = F(v);
static bool F(dynamic o) => true;
变量a的类型是bool,但是b是动态的而不是bool,为什么?
【问题讨论】:
-
不在 .NET 3.0 或 .NET 5 上,它不是。你在什么环境下认为
b应该是dynamic? -
在 .Net Framework 4.7.2 和 .Net 5.0 上是这样
-
@user2864740 我不知道该告诉你什么,我在VS2017(.net 4.7.2)和VS2019(.net 5.0)中运行它......“这个(语句|行为|观察) 是真的..."
-
@user2864740 我没有遵循你的逻辑...
bool c = b;和object q = b.Foo;都会总是编译,即使b.Foo没有定义,因为b直到运行时才会解析。 -
这在我工作的地方很常见——我们使用 VS2019 和 Resharper。似乎 Visual Studio 使用与常规编译器不同的东西来执行代码检查......我不知道。但有时 IDE 在某些情况下会显示您的代码中有错误,但它会构建并正常工作。 ReSharper 会生成自己的一组警告。运行此代码,并检查类型在运行时。
标签: c# dynamic compilation