This code sample无法编译。有什么工作吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
using church = Func<dynamic, dynamic, dynamic>;
class Program
{
static void Main(string[] args)
{
church True = (a, b) => a;
church False = (a, b) => b;
Func<church, church, church> And = (x, y) => x(y(True, False), False);
}
}
}
错误6内部编译器错误(地址5476A4CC处的0xc0000005):可能的罪魁祸首是'EMITIL'。编译器中发生内部错误。若要解决此问题,请尝试简化或更改下面列出的位置附近的程序。列表顶部的位置更接近发生内部错误的位置。可以使用/ errorreport选项向Microsoft报告此类错误。 TestApplication
答案 0 :(得分:49)
显然这是一个编译器错误。
我向我们的一位测试人员提到了这一点,他说:
我很高兴地报告已经修复了这个问题,你会在下一版本的VS中看到这个问题。您实际上也会在Visual Studio的BUILD Developer Preview中看到它!
对此错误道歉,并感谢您引起我们的注意。
答案 1 :(得分:27)
我使用VS2010(WinXP 64)重现了崩溃。
两个解决方法:
using
别名以下代码在VS2010上完全编译:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Func<dynamic, dynamic, dynamic> True = (a, b) => a;
Func<dynamic, dynamic, dynamic> False = (a, b) => b;
Func<Func<dynamic, dynamic, dynamic>,
Func<dynamic, dynamic, dynamic>,
Func<dynamic, dynamic, dynamic> > And
= (x, y) => x(y(True, False), False);
}
}
}
Mono 2.10编译器(dmcs)没问题。
[mono] /tmp @ dmcs test.cs
test.cs(18,42): warning CS0219: The variable `And' is assigned but its value is never used
Compilation succeeded - 1 warning(s)
[mono] /tmp @ ./test.exe
[mono] /tmp @
这是在linux上测试的。
答案 2 :(得分:21)
编辑:我现在设法重现它,和我有一个潜在的解决方法。
这有效:
csc Test.cs
这不是:
csc /debug+ Test.cs
所以看起来这是调试信息的问题。如果你可以在你的特定场景中没有它,你就可以去...
编辑:我刚刚测试过,/debug:pdbonly
也会发生这种情况......
编辑:万一有人想知道,我会对Eric Lippert这个问题。
编辑:这是我发现的最小代表:using church = System.Func<dynamic>;
class Program
{
static void Main() {}
}
答案 3 :(得分:14)
以下是另一种解决方法:不要使用Func
,请使用旧的委托类型。
public delegate dynamic Church(dynamic x, dynamic y);
class Program {
static void Main(string[] args) {
Church True = (a, b) => a;
Church False = (a, b) => b;
Func<Church, Church, Church> And = (x, y) => x(y(True, False), False);
}
}
这也有好处,教会在任何地方定义,而不仅仅是使用别名的每个文件。