1

我在 Visual Studio 2010 中有一个以框架 3.5 为目标的项目,其中包含如下代码:

    public class Test    {
        private object _field;
        private Action defaultAction = null;

        public Test(Action a)
        {
            defaultAction = a;
        }

        public Test()
            : this(() => { _field = new object(); })
        {
        }
    }
  • 当我从 VS 编译项目时,在第 11 行报告编译错误。
  • 当我使用“C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe Test.sln”从命令行编译项目时,编译成功。

事实上,这段代码在 VS2008 中编译,但在 VS2010 中以框架 3.5 为目标,没有。

关于发生了什么的任何想法?

更新

为了修复 V2010 中的代码,我进行了如下更改(这相当于原始代码):

public class Test    {
    private object _field;
    private Action defaultAction = null;

    public Test(Action a)
    {
        defaultAction = a;
    }

    public Test()
    {
        defaultAction = () => {_field = new object();}
    }
}

但让我担心的是,Visual Studio 正在使用框架 4.0 编译我的代码,这可能会在客户环境(框架 3.5)中部署我的应用程序时导致其他错误。

4

1 回答 1

0

我目前无法访问 VS2008 或 .NET 3.5,所以我无法调查为什么它会为您编译。What's New in the .NET Framework 4 中可能有链接的解释

然而,我可以提供的是在 VS2010 中编译它的修复程序。通过将 _field 声明为静态,它的实例将在 Test 类的构造函数中可用。用这个替换你发布的代码的第二行,代码应该编译:

private static object _field;
于 2012-11-21T08:43:39.617 回答