【发布时间】:2014-10-29 04:21:14
【问题描述】:
在 C# 5 中,当我尝试将动态作为方法参数传递时,结果由于某种原因变为动态。
class Program
{
static void Main(string[] args)
{
dynamic value = "John";
Find<int>(value).ToList();
}
public static IEnumerable<T> Find<T>(object value)
{
//SOME LOGIC
yield return default(T); //REAL RESULT
}
}
Find<T>(value) 必须返回 IEnumerable<T>。 为什么编译器认为它是动态的?
我知道Find<int>(val as object).ToList(); 解决了这个问题,但我想了解为什么会发生这种情况。
【问题讨论】:
-
Eric Lippert 写了一篇很棒的博客 - Dynamic contagion, part one 和 Dynamic contagion, part two
-
@PatricHofman,我的意思是如果尝试在
Find<int>(value)后面加上点,你会看到一条消息 - '动态表达式。此操作将在运行时解决。` -
@olegwx:好的。清除。从问题中错过了。
-
@petelids Eric Lippert 的文章自此移动:Dynamic contagion