2017-07-19 9 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」たとえばと呼ばれるフィールド名に「Menge」を意味し、m_aktuelleZeilleでは、例として含まれている私のクラスですので:

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

それ以外の場合私がnullable型を取得した場合、正常に動作します。(理由は私がifを暗示しています)

答えて

1

私はあなたに何を求めているのかは確信していますが、基礎となる型のデフォルト値を取得しようとしていると思います。例えばint?の場合、intのデフォルト値は0ですか?

その場合、Nullable<T>の汎用引数を与えるPropertyInfoオブジェクトでGenericTypeArgumentsを使用できます。これを使用してデフォルト値を取得できます。

など。 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 ...私は動的に値をm_textedits [i] .editvalueからクラスm_aktuelleZeilleにプロパティ "Menge"を例として動的にキャストしたいと思います。問題は通常、私のコードではelseと動作しますが、intのようなクラスにPropertyがある場合は、System.Decimal(Texeditは数値に設定されています)をキャストできません。 – FeuFeuAngel

+0

申し訳ありませんあなたがしようとしていることを理解するのに苦労しています。それをもっと明確にするために質問を更新できますか? – Fermin

関連する問題