【问题标题】:Invoking dynamic method with parameters based on a string使用基于字符串的参数调用动态方法
【发布时间】:2014-09-10 19:24:36
【问题描述】:

我想调用一个基于字符串的方法。使用MethodInfo.Invoke() 可以正常工作。

我想知道是否有一种方法可以基于相同的字符串向调用添加参数,例如而不是打电话给foo(),我想打电话给foo(1, true, "bar")。

我想我必须提取参数,将它们转换为正确的原始类型,然后使用methodInfo.Invoke(classInstance, params) 调用方法。

感觉很遥远,但是有没有“OK”的方法来解决这个问题?

【问题讨论】:

  • 你能提供更多关于这个应用的信息吗?
  • @PatrickHofman 这是一个网络表单应用程序,我希望用户能够在其中选择动态数据源。更具体地说,它是水晶报表网络报表参数的数据源。
  • 功能有何不同?
  • @PatrickHofman 它们还不存在,但基本上我希望用户能够通过传递一些可选参数来覆盖方法的默认行为。

标签: c# asp.net


【解决方案1】:

我们所说的方差水平是多少?是否所有参数都需要完全动态,即不同类型、不同数量、不同顺序。还是有一组已知顺序和类型的可选参数?

如果是动态的,那么对象字典/数组可能是唯一的解决方案。否则,可以使用默认值声明已知参数,使其成为可选:

public void SomeMethod(int one = 0, string two = "default", bool three = true)

【讨论】:

  • 类型将是已知的,尽管数量可能不同,这可以通过重载或默认值来解决,就像你说的那样。我最大的问题仍然是将值从字符串转换为正确的类型。
  • 这取决于使用情况。传入的参数肯定会被它们传递到的代码所期望吗?那么对象数组中的每个参数都可以转换成合适的类型吗?你是如何使用这些参数的?
  • 详细来说,字符串可能如下所示:foo("bar", true),这需要我提取"bar" 和true,将它们添加到object[],并将其作为第二个传递Invoke() 方法的参数。我希望有一个替代解决方案,但我想不出任何解决方案,因为我被字符串困住了
  • 我在想它宁愿是foo(object[] values) 而foo() 方法会传递数组。因此调用代码将简单地组合对象数组并将其传入。接收代码(由 foo 调用)将知道如何提取它需要的值。这是我认为的标准机制。
  • 是的,我也是这么想的。但是,仍然必须提取这 2 个值并将其转换为 new object[] { "bar", true }。我想我必须拆分字符串或类似的东西......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多