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

发布于 2024-12-22 11:14:42 字数 918 浏览 0 评论 0原文

我已经像这样扩展了 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>;

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

正确的调用方式是什么?

/Lasse

  • UPDATE *

将代码更改为:

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;
}

I have extended IDictionary like this:

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;
}

And I'm having trouble using the method, tried it like this:

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

And it says that it can't convert to non-delegate type.

What's the proper way of calling it?

/Lasse

  • UPDATE *

Changed code to:

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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无远思近则忧 2024-12-29 11:14:42

您缺少末尾的括号:

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

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


另外,您可以使用 typeof(T) 而不是 someObject.GetType(),我会在循环外部创建一个变量并重用它。

You're missing the brackets on the end:

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

The compiler thought you wanted to assign the method (delegate) to the variable.


Also, instead of someObject.GetType() you could use typeof(T), I'd create a variable outside the loop and reuse it too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文