2016-07-03 1 views
0

안녕하세요 여러분, 안녕하세요, "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."오류가 발생합니다. 내가 아주 확실하지 않다 ... 왜 여기에 코드입니다 : C# "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."형식/Get 속성 가져 오기

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 '이며,'T'는'from'에서 사용하는 객체의 타입이고'K'는 select에서 생성 한 익명 객체의 타입입니다. 그래서'query.GetType(). GetProperty ("Display")'는 반환 된 타입에 "Display"속성이 없으므로 null을 반환하고, ToString()을 호출하면 null 참조 예외가 발생합니다. 반사를 사용하여 문제를 해결하려면 @MikaelPuusaari의 말에 따라 루프의 항목에서 속성을 가져옵니다. –

+2

** 그러나 쿼리의 항목에서 가치를 얻으 려하지 않아도된다는 사실을 알고 있어야합니다. ** 간단한 'foreach' 루프를 다음과 같이 사용하십시오 : 'foreach (쿼리의 var 항목) { string details = item.Display; } –

답변

0

쿼리의 유형을 얻기 위해 노력하고, 다음 유형의 "디스플레이"열이 아닌 반환 값의 특성 데이터베이스에서

쿼리 유형에 "표시"속성이 없습니다. 다음과 같이 뭔가를해야합니다.

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

string details = property.Name; 

나는 그것이 당신을 올바른 길로 인도하기를 바랍니다.

또한 해당 행에 중단 점을 설정하여 줄의 어느 부분이 null 참조인지 확인하면 문제가있는 곳을 쉽게 찾아 낼 수 있습니다.

+0

그래도 작동하지만 반환합니다 : System.String 디스플레이 정보 대신 표시 : ( – richardj97

+0

작동합니다.) 고마워요! – richardj97

+0

조금 바뀌 었습니다. –

관련 문제