【发布时间】:2011-01-19 09:17:04
【问题描述】:
C# 4.0 动态使用有一些奇怪的行为:
using System;
class Program {
public void Baz() { Console.WriteLine("Baz1"); }
static void CallBaz(dynamic x) { x.Baz(); }
static void Main(string[] args) {
dynamic a = new Program();
dynamic b = new { Baz = new Action(() => Console.WriteLine("Baz2")) };
CallBaz(a); // ok
CallBaz(b); // ok
CallBaz(a); // Unhandled Exception:
// Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:
// The name 'Baz' is bound to a method and cannot be used like a property
}
}
我正在使用 Visual Studio 2010 Release Candidate。
这是一个错误吗?如果是真的,会在 Release 中修复吗?
【问题讨论】:
-
埃里克·利珀特在哪里:D
-
我也可以重现它...对 CallBaz(a) 的第一次调用工作正常,第二次调用失败。它看起来确实像一个错误,而且是一个严重的错误......
-
有趣。我已将一封电子邮件放入适当的列表中 - 希望它很快会得到一些关注。
-
ControlFlow,你应该认真考虑加入 .NET/C# 测试团队。这是您报告的第三个问题,Eric 已确认这是一个错误。
-
@Yogi True...谁是 ControlFlow?它是 C# 规范的拟人化吗?