如何调用扩展IDictionary(反射)的方法?

时间:2011-12-22 08:21:50

标签: c# idictionary

我已经像这样扩展了IDictionary:

public static T ToClass<T>(this IDictionary<string, string> source) where T : class, new()
{
     T someObject = new T();

     foreach (KeyValuePair<string, string> item in source)
     {
       someObject.GetType().GetProperty(item.Key).SetValue(someObject, item.Value, null);
     }

     return someObject;
}

我在使用该方法时遇到了麻烦,尝试过这样:

TestClass test = _rep.Test().ToClass<TestClass>;

它说它无法转换为非委托类型。

调用它的正确方法是什么?

/拉塞

  • 更新*

将代码更改为:

public static T ToClass<T>(this IDictionary<string, string> source) where T : class, new()
{
   Type type = typeof(T);
   T ret = new T();

   foreach (var keyValue in source)
   {
      type.GetProperty(keyValue.Key).SetValue(ret, keyValue.Value, null);
   }

   return ret;
}

1 个答案:

答案 0 :(得分:5)

你错过了最后的括号:

TestClass test = _rep.Test().ToClass<TestClass>();

编译器认为您希望将方法(委托)分配给变量。


此外,您可以使用someObject.GetType()代替typeof(T),而是在循环外创建一个变量并重复使用它。