当我调用一个函数并用动态替换其中一个参数时,编译器会将函数结果推断为动态。我不明白为什么会发生这种情况。带动态功能参数的C#编译器类型推理
例:推断类型为是动态的,所以这段代码编译,但当然在运行时失败,RuntimeBinderException:
dynamic b = "";
var a = MethodWithoutOverloads("", b);
a.DoesNotExist();
...
public string MethodWithoutOverloads(string a, string b) { ... }
有人知道为什么类型推断不是函数的返回类型?
编辑:编辑,以明确出现这种情况有没有方法重载
这种情况发生在我有一种方法时,即没有歧义时。 String.Format不是一个好例子,但是当没有歧义时我调用我自己的方法时类型推断也失败。 – Lev
@Lev这是正确的。*技术上*编译器或许能够毫不含糊地将其弄清楚,但我认为这需要更多的工作来获得看似不大的收益。每当“动态”是表达式的一部分时,结果也将通过“动态”。如果你确定知道类型,只需使用变量类型明确而不是使用'var' – Rob
好吧,所以基本上是“我们没有对这种情况实现类型推断”的情况...... – Lev