C# VisualStudio2008没有';无法识别Lambda表达式语法

C# VisualStudio2008没有';无法识别Lambda表达式语法,c#,asp.net,visual-studio-2008,.net-3.5,lambda,C#,Asp.net,Visual Studio 2008,.net 3.5,Lambda,我最近使用内置转换工具将一个Web应用程序项目(以及一些相关项目)从.NET2.0升级到.NET3.5。一切都很好,比如使用MS AJAX 3.5和2.0中的外部MS AJAX库 我的问题是在尝试使用新的Lambda表达式语法时出现的。编译器不会将Lambda表达式识别为有效语法。在解决方案中的所有项目中,目标框架版本都设置为3.5。我还能够在同一解决方案中的库项目中成功使用Lambda表达式 是给我错误的代码。没什么特别的 ObjectFactory.Initialize(x =>

我最近使用内置转换工具将一个Web应用程序项目(以及一些相关项目)从.NET2.0升级到.NET3.5。一切都很好,比如使用MS AJAX 3.5和2.0中的外部MS AJAX库

我的问题是在尝试使用新的Lambda表达式语法时出现的。编译器不会将Lambda表达式识别为有效语法。在解决方案中的所有项目中,目标框架版本都设置为3.5。我还能够在同一解决方案中的库项目中成功使用Lambda表达式

是给我错误的代码。没什么特别的

ObjectFactory.Initialize(x => 
        {
            x.ForRequestedType<IUnitIdSequencingService>().TheDefaultIsConcreteType<UnitIdSequencingService>();
            x.ForRequestedType<IGadgetDAO>().TheDefault.Is.OfConcreteType<GadgetDAO>().WithCtorArg("instance").EqualToAppSetting("OSHAInspectionManager");

        });

任何帮助都将不胜感激。我一直在谷歌搜索,运气不好

我对VS2008转换工具没有太多经验,但我知道其他项目转换工具也有“问题”。我建议您将“损坏”项目的.csproj文件与正在运行的项目进行比较。可能转换实用程序破坏了项目中的某些内容。您还可以尝试创建一个新项目,并复制所有源文件。

我对VS 2008转换工具没有太多经验,但我知道其他项目转换工具也有“问题”。我建议您将“损坏”项目的.csproj文件与正在运行的项目进行比较。可能转换实用程序破坏了项目中的某些内容。您还可以尝试创建一个新项目,并复制所有源文件。

使用现有项目重新引用时,您需要跳过几个环,TBH我发现创建一个新项目并将我现有的源文件添加到新项目更容易。

使用现有项目重新引用时,您需要跳转几圈,TBH我发现创建一个新项目并将现有的源文件添加到新项目更容易。

我猜的是将lambda传递到的方法的参数,它接受委托作为参数

如果这是真的,则需要将lambda强制转换为特定类型的委托。这有点令人困惑,但您需要知道的是,lambda不能总是正确推断,因此您需要强制转换它或更改方法签名以接受特定类型的委托

试试这个:

ObjectFactory.Initialize((Action<T>)(x => // where T is the typeof x
{
    // ...
}));
ObjectFactory.Initialize((Action)(x=>//其中T是x的类型
{
// ...
}));
您还可以尝试为Initialize创建一些重载,以接受特定类型的委托(例如Action)


如果您的方法确实接受特定类型的委托类型,那么您可以忽略以下回答:)

我猜您将lambda传递到的方法的参数是否接受委托作为参数

如果这是真的,则需要将lambda强制转换为特定类型的委托。这有点令人困惑,但您需要知道的是,lambda不能总是正确推断,因此您需要强制转换它或更改方法签名以接受特定类型的委托

试试这个:

ObjectFactory.Initialize((Action<T>)(x => // where T is the typeof x
{
    // ...
}));
ObjectFactory.Initialize((Action)(x=>//其中T是x的类型
{
// ...
}));
您还可以尝试为Initialize创建一些重载,以接受特定类型的委托(例如Action)


如果您的方法确实接受特定类型的委托类型,那么您可以忽略以下答案:)

如果任何页面是由ASP.NET编译的(即您没有预编译WAP),那么您需要确保ASP.NET知道C#3.0(.NET 3.5)编译器。确保
web.config
中包含以下内容:

<system.codedom>
   <compilers>
      <compiler language="c#;cs;csharp"
            extension=".cs"
            warningLevel="4"
            type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=
         <providerOption name="CompilerVersion" value="v3.5"/>
         <providerOption name="WarnAsError" value="false"/>
      </compiler>
   </compliers>
</system.codedom>


如果任何页面正在由ASP.NET编译(即,您没有预编译WAP),则需要确保ASP.NET了解C#3.0(.NET 3.5)编译器。确保
web.config
中包含以下内容:

<system.codedom>
   <compilers>
      <compiler language="c#;cs;csharp"
            extension=".cs"
            warningLevel="4"
            type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=
         <providerOption name="CompilerVersion" value="v3.5"/>
         <providerOption name="WarnAsError" value="false"/>
      </compiler>
   </compliers>
</system.codedom>


下面的函数是否编译?private void v(){Func f=x=>x;f(1);}以下函数是否编译?私有void v(){Func f=x=>x;f(1);}对于这种情况,使用Initialize((tx)=>{…});会更清楚。此外,编译器错误消息也会有所不同;会更清楚。此外,编译器错误消息也会有所不同。谢谢!我感觉问题出在编译器选项上。我在visualstudio中四处闲逛,没有看到任何有用的东西。谢谢!我感觉问题出在编译器选项上。我在visualstudio中四处闲逛,并没有看到任何有用的东西。