2016-11-28 129 views
1

我有一個通用的方法:傳遞變量類型,泛型方法

public static T GetSetting<T>(string Key){ 
    .... 
} 

它返回從數據庫中的設定值。 現在我試圖使其與設置自動填充類:

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本身

+1

的類型需要在編譯時是已知的,見http://stackoverflow.com/questions/2604743/setting-generic-type-at-runtime – PaulF

+2

通'object'作爲泛型參數,如' SetValue'已經期望一個'Object' – haim770

+0

你的選擇要麼像haim770建議的那樣做,要麼使用反射來調用'GetSetting '。但是,如果你這樣做了很多,你可能會更好地將你的設置類序列化爲JSON/XML/binary並在稍後將其反序列化。 – DavidG

回答

1

由於SetValue()已經期待一個Object作爲參數,你可以簡單地通過object作爲SetMethod()泛型參數:

f.SetValue(m, User.GetSetting<object>(f.Name), null); 
相關問題