【发布时间】:2012-06-25 04:41:13
【问题描述】:
我们添加了一项功能,供用户编写 C# 脚本以供应用程序执行,这些脚本在运行时编译和运行。这些脚本可以访问我们公开的 API,它们由 CSharpCodeProvider 编译/运行。
我发现运行时编译的代码在调用带有可选参数的方法时会出现问题,例如:
public void BlackmailColonelMustard(int amount, string myAlias, bool tellHisWifeAnyway = true)
如果运行时编译的脚本调用 BlackmailColonelMustard(10000, "Mr Boddy"),编译器会抱怨没有只有两个参数的重载方法,而不是识别第三个参数的默认值.
当从预编译代码调用时,它自然可以正常工作。有谁知道我做错了什么?
是不是因为 VS2010(甚至是 .NET 4 之前的版本)足够聪明,可以编译使用可选参数的代码,但 .NET 3.5 运行时还没有学会这个技巧?
【问题讨论】:
-
如果您的目标是 .NET 3.5,
CSharpCodeProvider可能使用 C# 3.0 规则,这会阻止使用可选参数。 -
我想我可能会在使用默认参数时遇到麻烦。如果我们在某个时候实现 IronPython(Python 使用默认参数值)应该足够安全,但我想知道我们是否想要实现另一种不能很好地使用这种方法的 DLR 语言。您的评论可能同意本文:Default Parameters Should Not Be Used
标签: c# .net-3.5 optional-parameters csharpcodeprovider