Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
委托上的C#解析器错误?_C#_Compiler Errors - Fatal编程技术网

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

委托上的C#解析器错误?,c#,compiler-errors,C#,Compiler Errors,可能重复: 当我在做一个使用大量lambda的测试框架时,我发现了一个解析器错误 public class CSpecTestRunnerSpec : CSpecFacade<CSpecTestRunner> { public CSpecTestRunnerSpec() : base(new CSpecTestRunner()) { CreateOperations(); } private MyClassSpec

可能重复:

当我在做一个使用大量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());
           };
    }
公共类CSpecTestRunnerSpec:cspectfacade
{
公共CSpecTestRunnerSpec()
:base(新的CSpecTestRunner())
{
CreateOperations();
}
私有MyClassSpec MyClassSpec;
私有描述将在\u类型上运行\u;
操作前受保护的覆盖无效()
{
myClassSpec=新的myClassSpec();
}
私有void CreateOperations()
{
在\u类型上运行\u=
(@it,@do)=>
{
@它(“运行类型中包含的所有操作”);
@RunTestOnType(myClassSpec.GetType());
};
}
DescribeAll委托来自基类,其接口如下所示:

public delegate void DescribeAll(Action<string> description, TClass objSpec);
编辑代码,如下所示:

public delegate void DescribeAll(Action<string> description, TClass objSpec);
public delegate void descripbeall(操作描述,TClass objSpec);
我得到的例外是“委托操作不接受1个参数”,但它完全接受!在向类的代码中添加虚拟委托后:

    private Action<string> dummy;
私人行动假人;
它开始工作了。:-)

相比之下,相同的代码在没有虚拟委托的情况下在mono中运行时没有错误,它在多台机器上使用NET3.5和4.0进行了测试

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


p、 s框架已打开,因此您可以获取完整的代码并自己进行测试。

有一个委托类型
Action
不带参数。我想您需要
Action

public delegate void descripbeall(操作描述,TClass objSpec);

public delegate void descripbeall(操作描述,TClass objSpec);

public delegate void descripbeall(操作描述,TClass objSpec);
更新: 该错误已在C#5中修复。再次为给您带来的不便表示歉意,并感谢您的报告


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


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

是的,这可能会起作用,但我需要明确声明我需要一个字符串。descripbeall在\u类型上运行,而我不需要tat,因为@它将始终是一个字符串。EDIT:原始代码已编辑,我已经编辑了,但它不起作用。I ap挂起两个备选选项都不起作用:-)它看起来像C#bug,你知道我可以把它贴在哪里吗?
public delegate void DescribeAll(Action<object> description, TClass objSpec);
public delegate void DescribeAll<T>(Action<T> description, TClass objSpec);