繁体   English   中英

Visual Studio 2008无法识别Lambda表达式语法

[英]Visual Studio 2008 doesn't recognize Lambda Expression Syntax

最近,我使用内置的转换工具将Web应用程序项目(以及一些相关项目)从.net 2.0升级到.net 3.5。 一切工作正常,例如使用MS AJAX 3.5与2.0中的外部MS AJAX库。

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

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

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

        });

我得到的具体错误是:

Error   102 Invalid expression term '>' D:\projects\bohlco\pmr\PMR\Web\App_Code\Bootstrapper.cs 13  41  D:\...\Web\

任何帮助将不胜感激。 我很幸运地一直在搜索Google

如果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>

另外,如果您在IIS中托管,请确保将正确的文件夹设置为应用程序,并且正在使用ASP.NET v2.blah(而不​​是v1.1.blah)。

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

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

我猜你传递给lambda的方法的参数接受委托作为参数吗?

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

尝试这个:

ObjectFactory.Initialize((Action<T>)(x => // where T is the typeof x
{
    // ...
}));

另外,您可以尝试对Initialize进行一些重载以接受特定类型的委托(例如Action)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM