每当我将一个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; } )
也失败了,给出了相同的编译错误。
答案 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。