Lambda表达式创建无关的编译错误

时间:2010-10-20 11:14:47

标签: c# wpf visual-studio lambda compiler-errors

每当我将一个lambda表达式(以下面的形式)添加到我的wpf项目中时,我都会收到错误。错误与表达式无关,但每次添加时都会到达。

这是我的最新消息:

using ( LeisureServiceClient client = ServiceFactory.Instance.GetLeisureService() )
{
    client.Execute( ServiceFactory.Instance.ConnectionDetails, new MoveBasketItemsToAccountCommand()
    {
        BasketItemIDs = bisList.ToList().ConvertAll<Guid>( bis => bis.ID )
    } );
}

这对我来说似乎完全有效,这会产生以下编译错误,从client突出显示client.Execute(...)

Error 43: The type 'System.Windows.DependencyObject' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'.

此代码与DependancyObject无关。无论如何,System.Windows在.cs文件中引用,该文件还包含:

public class PointOfSaleViewModel : DependencyObject

非常乐意在删除lambda表达式时进行编译。

现在,增加混乱......这很好:

ServiceFactory.Instance.ShiftDataRefreshedEvent += ( s, e ) =>
{
    Account = new ObservableCollection<BasketItemSummary>( ServiceFactory.Instance.CurrentContact.Account );
    Basket = new ObservableCollection<BasketItemSummary>( ServiceFactory.Instance.Shift.OpenCurrentContact.Basket );
};

所以,这不是导致错误的lambda表达式本身,我不知道为什么这不是编译,而且非常渴望在我的头爆炸之前得到一些输入。

更新

同事建议的替代语法

BasketItemIDs = bisList.ToList().ConvertAll( delegate( BasketItemSummary basketItem ) { return basketItem.ID; } )

也失败了,给出了相同的编译错误。

3 个答案:

答案 0 :(得分:1)

听起来像BasketItemSummary(或其中一个属性)公开了对公共API的依赖 - 也许它是该类型的基类。简单地说:按照指示添加缺少的参考。

答案 1 :(得分:1)

我知道这个问题已经过时了,但万一有人遇到这个问题:

最近,我遇到了一个像你一样的问题。我正在使用的解决方案包括一个Web项目,该项目引用了一个wpf项目(用于生成下载文档)。在wpf项目中进行一些修改后,Web项目将不再编译,并显示以下错误消息:

Error   4   The type 'System.Windows.DependencyObject' is defined in an assembly that is not referenced. You must add a reference to assembly 'WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

经过一些调试后,我发现错误信息只指向涉及LINQ操作的行(首先我还认为它与lambdas有关,就像你一样)。

最后,问题的根源是我从http://www.scottlogic.co.uk/blog/colin/2010/03/linq-to-visual-tree/获取的一些wpf的可视化树辅助方法。我从LinqToVisualTree中获取了这些方法并将它们放在“System.Linq”命名空间下。看起来在我的Web项目中与原始的Linq扩展方法有些冲突,一旦我将LinqToVisualTree方法的命名空间改为其他问题就会消失。

答案 2 :(得分:0)

您需要在项目中添加对dll的引用:右键单击项目,选择add reference。