2017-08-02 141 views
0

子類的內容,我有以下類獲取從對象

public enum Category { foo, foo1, foo2 } 

public class Event 
{ 

    public DateTime Timestamp { get; set; } = DateTime.Now; 
    public string GameTime { get; set; } 
    public string Content { get; set; } 
    public Person Author { get; set; } 
    public Category Category { get; set; } 

} 

public class MemberEvent : Event 
{ 
    public Member Person { get; set; }     
} 

的對象是正確創建的,但如果我想打電話給「人」,這是不顯示我的。如果我有var match,我可以打電話給例如match[0].Timestamp但不是match[0].PersonEvent對象存儲在List中,因此也是索引。我覺得我錯過了一些簡單的東西。

UPDATE:用於創建對象

var match = SessionController.Instance.Current; 

DataTable dt = dataGrid.ItemsSource as DataTable; 

     foreach (System.Data.DataRow item in dt.Rows) 
     { 
       var memberFoo = new MemberEvent(); 
       memberFoo.Category = Category.Warning; 
       memberFoo.Time = item["Time"].ToString(); 
       var person = new Person(); 
       person.FirstName = item["FirstName"].ToString(); 
       person.LastName = item["LastName"].ToString(); 
       var passport = new Passport(); 
       passport.Active = true; 
       passport.PassNumber = item["Pass"].ToString(); 
       passport.Player = person; 
       memberFoo.Person = passport; 
       match.Match.Events.Add(memberFoo);    
     } 

     SessionController.Instance.Current = match; 
+2

是名單'Event'?如果列表被創建爲'List ',那麼將不可能找到'Person'屬性,因爲它不是'MemberEvent'。 –

+1

你能發佈你創建對象的實際代碼嗎?這將大大幫助。 –

+0

@EtienneFaucher是它創建爲'List ' – Hadda

回答

0

投下你的實例預期的類型和測試空守護了意外:

var memberEvent = match[0] as MemberEvent; 
if (memberEvent != null) 
{ 
    Console.WriteLine(memberEvent.Person) 
} 
+0

非常感謝:)其實這很簡單,但有時我太盲目了:D – Hadda

0

你將不得不投你EventMemberEvent如果你要訪問的Person屬性的代碼。無法從Event獲得該房產。

List<Event> myEvents = GetMyEvents(); 
var myMemberEvent = (MemberEvent)myEvent[0]; 

如果它不能轉換爲MemberEvent,可能會導致異常。