Лямбда-выражение создает несвязанную ошибку компиляции - PullRequest
1 голос
/ 20 октября 2010

Всякий раз, когда я добавляю лямбда-выражение (в следующей форме) в свой проект 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

, который очень рад компилированию, когда лямбда-выражение удалено.

Теперь, чтобы добавить путаницу ... это нормально:

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

Итак, это не само лямбда-выражение, которое вызывает ошибку, у меня нет идей относительно того, почему это не компилируется, и я очень хочу получить какую-то информацию, прежде чем моя голова взорвется.

Обновление

альтернативный синтаксис, предложенный коллегой

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

также дает сбой, выдавая ту же ошибку компиляции.

Ответы [ 3 ]

1 голос
/ 20 октября 2010

Мне кажется, что BasketItemSummary (или одно из свойств) раскрывает эту зависимость от общедоступного API - возможно, это базовый класс для типа.Просто: добавьте отсутствующую ссылку, как указано.

1 голос
/ 14 июля 2012

Я знаю, что этот вопрос старый, но в случае, если кто-то еще сталкивается с этой проблемой:

Недавно я столкнулся с проблемой, очень похожей на вашу. Решение, над которым я работаю, включает в себя веб-проект, имеющий ссылку на проект wpf (для генерации документов для скачивания). После некоторых изменений в проекте wpf веб-проект больше не будет компилироваться со следующим сообщением об ошибке:

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 (сначала я также подумал, что это связано с лямбдами, как и вы).

В конце корень проблемы был в некоторых вспомогательных методах визуального дерева wpf, которые я взял из http://www.scottlogic.co.uk/blog/colin/2010/03/linq-to-visual-tree/. Я взял методы из LinqToVisualTree и поместил их в пространство имен System.Linq. По-видимому, это как-то противоречило оригинальным методам расширения Linq в моем веб-проекте, и как только я изменил пространство имен методов LinqToVisualTree на что-то другое, проблема исчезла.

0 голосов
/ 20 октября 2010

Вам необходимо добавить ссылку на dll в вашем проекте: щелкните правой кнопкой мыши на проекте, выберите Добавить ссылку.

...