2016-11-28 9 views
1

に変数の型を渡す私は、一般的な方法があります。 今、私はそれを設定して自動的にクラスを埋める作るしようとしている:ジェネリックメソッド

public static T GetAllSettings<T>(this T m) 
      { 
       FieldInfo[] fields = typeof(T).GetFields(BindingFlags.Public); 
       foreach(FieldInfo f in fields) 
        f.SetValue(m, User.GetSetting<f.FieldType>(f.Name), null); 
//            ~ <=Error in here  
      } 

をしかし、私はエラーを取得しています:

'f' is a variable but is used like a type

さて、私は実際にf FIELDTYPEを取得していませんよf自体SetValue()がすでにパラメータとしてObjectを期待しているので、あなたは、単にSetMethod()のジェネリックパラメータとしてobjectを渡すことができ

+1

型はコンパイル時に知られている必要がある、見http://stackoverflow.com/questions/2604743/setting-generic-type-at-runtime – PaulF

+2

は 'として、一般的なパラメータとして' object'を渡しますSetValue'はすでに 'Object'を予期しています – haim770

+0

あなたのオプションは、haim770が示唆するか、あるいは反射を使って' GetSetting 'を呼び出すかのいずれかです。しかし、これをたくさんしている場合は、設定クラスをJSON/XML /バイナリにシリアル化して後で逆シリアル化するほうが良いかもしれません。 – DavidG

答えて

1

f.SetValue(m, User.GetSetting<object>(f.Name), null); 
関連する問題