2016-11-28 122 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); 
相关问题