2016-07-03 10 views
0

Привет, ребята, я получаю сообщение об ошибке: «Ссылка на объект не установлена ​​в экземпляр объекта». Я не совсем уверен, почему ... Вот код:C# «Ссылка на объект не установлена ​​в экземпляр объекта» Get Type/Get Property

public void LoadUserContacts(ListBox FriendsLb) 
{ 
    FriendsLb.DisplayMember = "Display"; 
    var query = from o in Globals.DB.Friends 
       where o.UserEmail == Properties.Settings.Default.Email 
       select new 
       { 
        FirstName = o.FirstName, 
        LastName = o.LastName, 
        Email = o.Email, 
        Display = string.Format("{0} {1} - ({2})", o.FirstName, o.LastName, o.Email), 
       }; 
    FriendsLb.DrawMode = DrawMode.OwnerDrawVariable; 

    foreach (object contact in query.ToList()) 
    { 
     string details = query.GetType().GetProperty("Display").ToString(); 
     FriendsLb.Items.Add(new Contacts(Properties.Resources.avatar, details)); 
     FriendsLb.DrawItem += FriendsLb_DrawItem; 
     FriendsLb.MeasureItem += FriendsLb_MeasureItem; 
    } 
} 

Какой код вызывает ошибку:

string details = query.GetType().GetProperty("Display").ToString(); 

Любые идеи? Я пытаюсь получить свойство отображения из запроса:

Display = string.Format("{0} {1} - ({2})", o.FirstName, o.LastName, o.Email), 
+1

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

+1

Тип запроса - 'System.Linq.Enumerable.WhereSelectEnumerableIterator ' '' '' 'тип объекта, который вы используете в' from', а 'K' - тип анонимного объекта, который вы создали в select. Таким образом, 'query.GetType(). GetProperty (« Display »)' возвращает значение null, поскольку в возвращаемом типе нет свойства «Display», а затем вызывается 'ToString()', он вызывает исключение ссылочной ссылки. Чтобы решить проблему, используя отражение, следуйте за тем, что сказано @MikaelPuusaari, получите свойство из элемента цикла. –

+2

** Но вы должны знать, что вам не нужно отражать, чтобы получить значение из элементов запроса. ** Просто используйте простой цикл foreach: таким образом: 'foreach (элемент var в запросе) { string details = item.Display; } ' –

ответ

0

Вы пытаетесь получить тип запроса, а затем свойство «Дисплей» типа, а не возвращаемого значения столбца в базе данных

Тип запроса не будет иметь свойство «показывать». Вам нужно сделать что-то более похожее:

string property = contact.GetProperty("Display", typeof(string)); 

string details = property.Name; 

Надеюсь, он положит вас на правильный путь.

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

+0

Да, но это работает, но он возвращает: System.String Дисплей вместо информации дисплея :( – richardj97

+0

Получил это. Спасибо! – richardj97

+0

Немного изменил, надеюсь, у вас это получилось –