C# 中的扩展方法和 dynamic
关键字
在 C# 中对 dynamic
对象使用扩展方法可能会导致运行时错误。 让我们用一个例子来说明这一点:
<code class="language-csharp">List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 }; Console.WriteLine(list.First());</code>
这段代码完美运行。 但是,如果我们尝试这样做:
<code class="language-csharp">dynamic dList = list; Console.WriteLine(dList.First());</code>
抛出一个RuntimeBinderException
。 发生这种情况是因为编译器和运行时处理扩展方法和动态对象的方式。
通常,编译器通过检查代码范围内的所有可用静态类,考虑命名空间和 using
指令来搜索扩展方法。 这使得它可以从 First()
.System.Linq
中找到正确的
对于 dynamic
对象,运行时没有有关命名空间和 using
指令的编译时信息。 在运行时包含这些信息将非常复杂且效率低下。 因此,C# 设计者选择不实现此功能,以避免性能开销和潜在的不稳定。
以上是为什么扩展方法在C#中使用动态对象失败?的详细内容。更多信息请关注PHP中文网其他相关文章!