2017-07-19 101 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