2013-07-02 2 views
0

У меня есть пользовательский объект класса пользователей appuserDictionaryEntry для объекта пользователя

public class appuser 
    { 
     public Int32 ID { get; set; } 
     public Int32 ipamuserID { get; set; } 
     public Int32 appID { get; set; } 
     public Int32 roleID { get; set; } 
     public Int16 departmenttypeID { get; set; } 
     public generaluse.historycrumb recordcrumb { get; set; } 

     public appuser() { } 
     public appuser(DataRow dr) 
     { 
      ID = Convert.ToInt32(dr["AppUserID"].ToString()); 
      ipamuserID = Convert.ToInt32(dr["IpamUserID"].ToString()); 
      appID = Convert.ToInt32(dr["AppID"].ToString()); 
      roleID = Convert.ToInt32(dr["AppRoleID"].ToString()); 
      departmenttypeID = Convert.ToInt16(dr["AppDepartmentTypeID"].ToString()); 
      recordcrumb = new generaluse.historycrumb(dr); 
     } 
     public void appuserfill(DictionaryEntry de, ref appuser _au) 
     { 
      //Search for key in appuser given by de and set appuser property to de.value 
     } 
    } 

Как установить свойство в объекте appuser, который передается в качестве ключа в DictionaryEntry, не зная, что ключ изначально?

например: de.key = ipamuserID, динамически найти свойство в пределах _au и установить значение = de.value?

+0

Может быть, _Reflection_? – mshsayem

ответ

0

Технически вы можете использовать отражение, но это нехорошее решение - попытка записать в произвольные свойства. Решение с отражением может быть следующим:

//Search for key in appuser given by de and set appuser property to de.value 
public void appuserfill(DictionaryEntry de, ref appuser _au) { // <- There's no need in "ref" 
    if (Object.ReferenceEquals(null, de)) 
    throw new ArgumentNullException("de"); 
    else if (Object.ReferenceEquals(null, _au)) 
    throw new ArgumentNullException("_au"); 

    PropertyInfo pInfo = _au.GetType().GetProperty(de.Key.ToString(), BindingFlags.Instance | BindingFlags.Public); 

    if (Object.ReferenceEquals(null, pInfo)) 
    throw new ArgumentException(String.Format("Property {0} is not found.", de.Key.ToString()), "de"); 
    else if (!pInfo.CanWrite) 
    throw new ArgumentException(String.Format("Property {0} can't be written.", de.Key.ToString()), "de"); 

    pInfo.SetValue(_au, de.Value); 
} 
Смежные вопросы