为什么动态调用返回动态结果?

dot*_*ter 10 c# language-design .net-4.0 c#-4.0

public string Foo(object obj) {
    return null;
}

public string Foo(string str) {
    return null;
}

var x = Foo((dynamic) "abc");
Run Code Online (Sandbox Code Playgroud)

为什么x动态,编译器不够智能或者我错过了重要的东西?

Jus*_*ner 4

我只是在这里猜测,但是...

当您添加强制转换时dynamic,整个表达式将变成动态表达式。动态表达式的结果总是会这样,dynamic因为一切都在运行时解决。

查看有关使用的 MSDN 页面dynamic以获取更多信息:

使用动态类型(C# 编程指南)

并滚动到以下文本:

大多数动态操作的结果本身就是动态的。

  • @Darin - ...我从来不喜欢动态类型。:-PI 认为这是 C# 语言人员需要介入并验证的时候之一。当你需要埃里克时他在哪里?哈哈。 (2认同)