【问题标题】:C# dynamic parameter of a function changes it return typeC# 函数的动态参数改变它的返回类型
【发布时间】: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


【解决方案1】:

认为简短的回答是,一旦您声明了dynamicdynamic“行为”(?) 将继续在所有未来的引用中传播,直到您明确解决它.

并不是F(o)的返回类型变了,而是编译器根本不在乎了。

dynamic 变量的声明已禁用编译时类型检查,以便对所有未来对 那个 变量的引用...再次,直到(或除非)它被明确解决。

不过,我期待阅读其他解释。

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2017-05-13
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多