2017-07-19 96 views
1

所以,我無法鑄造System.Nullables像int ?.如何通過System.Nullable獲取默認類型按類名只是按名稱?

經過一些研究,我修改了我的代碼,但我沒有任何想法如何通過名稱來獲取類型。

 for (int i = 0; i < m_textEdits.Count; i++) 
     { 
      string fieldName = m_textEdits[i].Name.Substring(m_textEdits[i].Name.LastIndexOf("_") + 1); 
      System.Reflection.PropertyInfo propInfo = m_aktuelleZeille.GetType().GetProperty(fieldName); 
      if (propInfo != null) 
      { 
       if (propInfo.GetMethod.ToString().Contains("Null")) 
       { 
        propInfo.SetValue(m_aktuelleZeille, m_textEdits[i].EditValue ?? default(IDK WHAT TO PUT IN HERE)); 
       } 
       else if (propInfo.SetMethod != null) propInfo.SetValue(m_aktuelleZeille, m_textEdits[i].EditValue); 
      } 
     } 

m_texedits是Textedits的列表,文本編輯被稱爲例如「tb_Menge」所以在字段名代表「門奇」和m_aktuelleZeille是我的類,它包含的例子:

private int? menge; 
    public int? Menge 
    { 
     get { return menge; } 
     set 
     { 
      if (value != menge) 
      { 
       menge = value; 
       OnPropertyChanged("Menge"); 
      } 
     } 
    } 

的否則,如果是工作正常,只是如果我得到可以爲空的類型(那爲什麼我實施如果)

回答

1

我不確定你在問什麼,但我認爲你正在尋找基礎類型的默認值。例如如果int?那麼默認爲int,這是0?

如果是這種情況,那麼您可以在PropertyInfo對象上使用GenericTypeArguments,它將爲您提供Nullable<T>的通用參數,然後可以使用它獲取默認值。

E.g. var defaultValue = Activator.CreateInstance(propInfo.GenericTypeArguments.First());

不過,我會謹慎使用爲Nullable<T>的默認值是null,沒有任何潛在價值的默認。有關詳細信息,請參閱What is the default value of the nullable type "int?" (including question mark)?

+0

propInfo.Generic ...不工作,我想動態地將屬性「Menge」中的m_textedits [i] .editvalue值轉換爲我的類m_aktuelleZeille作爲示例。問題是它通常與其他工作,如果在我的代碼,但如果我有我的類中的屬性像int ?,它說我無法將System.Decimal(Texedit設置爲數字)System.NullableInt32 – FeuFeuAngel

+0

對不起,我是努力去理解你想要做的事情。你能否更新這個問題使其更清楚? – Fermin