委托(delegate)上的 C# 解析器错误?

标签 c# compiler-errors

<分区>

Possible Duplicate:
'Delegate 'System.Action' does not take 0 arguments.' Is this a C# compiler bug (lambdas + two projects)?

当我在做一个大量使用 lambda 的测试框架时,我偶然发现了一个解析器错误。

public class CSpecTestRunnerSpec : CSpecFacade<CSpecTestRunner>
{
    public CSpecTestRunnerSpec()
        : base(new CSpecTestRunner())
    {
        CreateOperations();
    }

    private MyClassSpec myClassSpec;
    private DescribeAll run_on_type;

    protected override void BeforeOperation()
    {
        myClassSpec = new MyClassSpec();
    }

    private void CreateOperations()
    {
        run_on_type =
           (@it, @do) =>
           {
               @it("Runs all of the operations contained in a type");
               @do.RunTestOnType(myClassSpec.GetType());
           };
    }

DescribeAll 委托(delegate)来自基类,它的接口(interface)如下所示:

编辑代码如下:

public delegate void DescribeAll(Action<string> description, TClass objSpec);

我遇到的异常是“委托(delegate)操作不接受 1 个参数”,但它确实接受了!在我的类代码中添加了一个虚拟委托(delegate)之后:

    private Action<string> dummy;

它开始工作了。 :-)

相比之下,相同的代码在没有虚拟委托(delegate)的情况下在单声道中运行没有错误,它在具有 NET 3.5 和 4.0 的多台机器上进行了测试。

所以我的问题是,这是编译器方面的错误还是我方面的错误?如何解决这个问题?

p.s 框架在 codeplex 上这样您就可以获得完整的代码并自己进行测试。

最佳答案

更新:

该错误已在 C# 5 中修复。再次对给您带来的不便表示歉意,并感谢您的报告。


这是编译器中的一个已知错误,尽管它不在解析器中;它在语义分析器和元数据导入缓存之间的交互中。我对错误的分析在这里:

'Delegate 'System.Action' does not take 0 arguments.' Is this a C# compiler bug (lambdas + two projects)?

这是我的错;我带来的不便表示歉意。我们将尝试在下一个版本中修复它。

关于委托(delegate)上的 C# 解析器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5717637/

相关文章:

c# - 使用 Entity Framework Core 为数据库建立多对多关系

c# - Sitecore - 更新工作流程历史记录

c# - 将转换转换为 RectTransform

C++找不到-l-static-libgcc

c++ - 在 qt 中切换编译器后出现错误

C#/XAML 编译错误 - 各种错误(名称 "LayoutAwarePage"不存在”)

c# - 当 UAC 被拒绝时,Process.Start 永远不会返回

c# - TcpClient 性能 - 发送 4 个标量值比发送包含所有值的 1 个字节数组慢得多

c - GCC 提示缺少对同一文件中函数的引用

c++ - 使用 CMake 编译带有链接 dll 的应用程序。需要查看工作示例