当前位置: 首页 > 编程语言 > C#

将dynamic传递给方法时,结果是一个动态表达式,即使它不是共享的

时间:2023-04-11 03:37:21 C#

当dynamic作为方法参数传递时,由于某种原因结果变成动态的。类程序{staticvoidMain(string[]args){dynamicvalue="John";查找(值).ToList();}publicstaticIEnumerableFind(objectvalue){//一些逻辑yieldreturndefault(T);//真正的结果}}Find(value)必须返回IEnumerable。为什么编译器认为它是动态的?我知道Find(valasobject).ToList();解决了这个问题,但我想了解为什么会这样。因为有可能在运行时有一个Find匹配另一个方法而不是Find,一旦你得到动态,一切都是动态的,包括解决哪个方法适合,所以一旦表达式中的某些东西是动态的,整个表达式就是动态的。例如,可能有另一种方法publicstaticTFind(sometypevalue){returndefaultT;如果动态实际上是某种类型,这在运行时会更好地匹配,所以只要编译器不知道动态是什么就无法推断返回类型,因为该类型可以是任何类型的最佳运行时匹配方法返回的类型。所以编译器说它返回动态,因为这是最好的选择,而你的方法返回其他东西,但编译器还不知道该方法是否会被调用。dynamic在编译时是未知类型,但在运行时是未知类型。所以在运行时它可能是一个字符串类型,并且可能有一个更好的匹配称为Find(stringvalue)返回不同的类型。这就是编译器不能告诉你的原因。它在运行时解决。以上就是C#学习教程:dynamic传递给方法时,结果是一个动态表达式,虽然不是分享的全部内容,如果对大家有用还需要进一步了解C#学习教程,希望大家多多关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: