public RT Parse <RT>() where RT : new() { if (this.size == 0 || this.buffer.IsNullOrEmpty()) { return(default(RT)); } RT entity = new RT(); foreach (PropertyInfo p in entity.GetType().GetProperties()) { M1CardAttribute m1Attr = p.GetCustomAttribute <M1CardAttribute>(); if (m1Attr != null && handler.Keys.Contains(m1Attr.DataType)) { ICardDataTypeHandler __handler = handler[m1Attr.DataType]; byte[] __buffer = new byte[m1Attr.Length]; Array.Copy(buffer, m1Attr.Offset, __buffer, 0, m1Attr.Length); p.SetValue(entity, __handler.Parse(p.PropertyType, __buffer)); } } return(entity); }