kia9372 Ответов: 3

Значение не может быть нулевым. Имя параметра: источник при использовании универсального сервиса в проекте


я использую этот код для `FindUser` в основном проекте :

public MainWindow()
    {
        var usersManagerService = StructureMapDefnation.Container.GetInstance<IUser>();
        InitializeComponent();
        usersManagerService.Find(x => x.Username == "k" && x.Password == "k");
    }


я отлаживаю проект , он переходит на уровень сервиса и с помощью функции поиска :

public T Find(Func<T, bool> predicate)
    {
        return Entites.Where(predicate).FirstOrDefault();
    }


но это показывает мне эту ошибку :

Value cannot be null. Parameter name: source


в чем проблема ? как я могу решить эту проблему ?

Что я уже пробовал:

public T Find(Func<T, bool> predicate)
    {
        return Entites.Where(predicate).FirstOrDefault();
    }

3 Ответов

Рейтинг:
22

Graeme_Grant

Вы установили точку останова в строке, которая выдает ошибку, запустили код, а затем проверили значения перед выполнением строки? Вы увидите, что является нулевым и вызывает ошибку.

Если вы не знакомы с работой с точками останова, это видео поможет вам: Базовая отладка с помощью Visual Studio 2010 - YouTube[^]


kia9372

`предикат` имеет значение .

kia9372

я отлаживаю это . покажите картинку :

http://s9.picofile.com/file/8301963334/Untitled.png

Graeme_Grant

Нет, то есть после выполнения строки, а не до. Вы не отлаживаете, а только сообщаете об ошибке, которую видите.

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

Рейтинг:
19

OriginalGriff

Мы не можем исправить это для вас - это зависит от ваших данных, которых у нас нет.
Наверное, ваш Entites коллекция равна нулю, и именно поэтому возникает ошибка - вы не можете повторить нулевую коллекцию.
Так что все будет зависеть от тебя.
Поставьте точку останова в первой строке таблицы. Find выполните функцию и запустите свой код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


kia9372

я отлаживаю это . покажите картинку :

http://s9.picofile.com/file/8301963334/Untitled.png

Graeme_Grant

Нет, то есть после выполнения строки, а не до. Вы не отлаживаете, а только сообщаете об ошибке, которую видите.

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

OriginalGriff

Я и близко не подойду к этому сайту: он указан как "вредоносный домен".
Не пытайтесь давать нам скриншоты: расскажите нам, что вы получаете, когда вы это получаете и копируете сообщения об ошибках.

Рейтинг:
12

kia9372

найди ответ . я прокомментировал эту строчку :

Entites = Uow.Set<T>();