2017-08-02 118 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,可能会导致异常。