使用数据中的参数调用 C# 方法

2024-04-18

比如说,我有一个像这样的 XML 字符串,

<METHOD>foo</METHOD>
<PARAM1>abc</PARAM1>
<PARAM2>def</PARAM2>
...
<PARAM99>ghi</PARAM99>
<PARAM100>jkl</PARAM100>

我有一个方法

void foo(String param1, String param2, ..., String param99, String param100)
{
...
}

有没有什么简单的方法可以让我将此字符串映射到真正的方法调用,并且参数与 C# 中方法的参数名称匹配?


假设您知道该类型,有它的实例,并且该方法实际上是公共的:

string methodName = parent.Element("METHOD").Value;
MethodInfo method = type.GetMethod(methodName);

object[] arguments = (from p in method.GetParameters()
                      let arg = element.Element(p.Name)
                      where arg != null
                      select (object) arg.Value).ToArray();

// We ignore extra parameters in the XML, but we need all the right
// ones from the method
if (arguments.Length != method.GetParameters().Length)
{
    throw new ArgumentException("Parameters didn't match");
}

method.Invoke(instance, arguments);

请注意,我在这里进行区分大小写的名称匹配,这不适用于您的示例。如果您想要不区分大小写,则稍微困难一些,但仍然可行 - 就我个人而言,我建议您尽可能使 XML 与方法匹配。

(如果它是非公开的,您需要为调用提供一些绑定标志GetMethod.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用数据中的参数调用 C# 方法 的相关文章

  • 如何向 UWP 项目添加 .NET dll 引用?

    我有几个适用于 NETv4 x 的 NET dll 项目 我将版本更改为 4 6 1 并重新构建 没有出现问题 当我尝试从 UWP 项目向它们添加引用时 出现错误 项目的目标是 NETCore 而文件引用的目标是 NET框架 这不是受支持的
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • Linq Where 本地计数器关闭在 VS watch 中的结果不同

    我尝试删除前 3 个元素array与 LinQWhere扩展功能 这是一个例子 var array new 1 2 3 4 5 6 7 8 9 var count 3 var deletedTest1 0 var test1 array W
  • 身份未映射异常

    System Security Principal IdentityNotMappedException 无法转换部分或全部身份引用 该错误仅在应用程序注册后出现一次 当 SecurityIdentifier 无法映射时 例如 返回 Ide
  • 如何避免选择项目时 winforms 树视图图标发生变化

    我正在一个小型 C Winforms 应用程序中尝试树视图 我已经以编程方式将 ImageList 分配给树视图 并且所有节点都很好地显示了它们的图标 but当我单击一个节点时 它的图标会发生变化 变为 ImageList 中的第一个图像
  • 成员初始值设定项列表中的求值顺序是什么?

    我有一个带有一些参数的构造函数 我假设它们是按照列出的顺序初始化的 但在一种情况下 它们似乎是按相反的顺序初始化的 导致中止 当我反转参数时 程序停止中止 下面是我正在使用的语法的示例 a 之前需要初始化b 在这种情况下 你能保证这个初始化
  • CMake - 将预构建库链接到 C# 项目

    我正在使用 CMake 构建 C 库 该库依赖于已构建的库 dll 我似乎无法让图书馆链接到我的图书馆 我尝试过使用target link libraries mylib external lib 我也尝试过暴力破解 reference e
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • 为什么以下代码不允许我使用 fgets 获取用户输入但可以使用 scanf?

    这是一个更大程序的简短摘录 但该程序的其余部分无关紧要 因为我认为我能够隔离该问题 我怀疑这与我使用 fgets 的方式有关 我读过 最好使用 fgets 而不是 scanf 但我似乎无法让它在这里正常工作 当我使用以下代码时 程序不会给我
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • C++ Primer 5th Edition 错误 bool 值没有指定最小大小?

    bool 的最小大小不应该是 1 个字节吗 这有点学术性的东西 尽管它们会转换为数字 并且 与其他所有事物一样 它们最终将基本上由计算机内存中的数字表示 但布尔值不是数字 你的bool可以取值true 或值false 即使您确实需要至少 1
  • 如何在 C++ 中使用 PI 常数

    我想在一些 C 程序中使用 PI 常数和三角函数 我得到三角函数include
  • 改进C++逐行读取文件的能力?

    我正在解析大约 500GB 的日志文件 我的 C 版本需要 3 5 分钟 我的 Go 版本需要 1 2 分钟 我正在使用 C 的流来流式传输文件的每一行以进行解析 include
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • C# - 为什么我需要初始化 [Out] 参数

    我有几个从本机 dll 导入的方法 使用以下语法 internal static class DllClass DllImport Example dll EntryPoint ExampleFunction public static e
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 多个同名内存数据库

    关系到这个答案 https stackoverflow com a 48446491 596758 我试图通过设置让多个上下文工作UseInMemoryDatabase以同名 下面的测试失败 第二个上下文为空 我还需要做什么才能在内存数据库
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn

随机推荐

  • AWS cli windows - 在将路径添加到环境变量后仍然收到“'aws'无法识别...”?

    找到以下说明here https stackoverflow com questions 42099986 setting up the path so aws cli works properly 和其他地方 我将 USERPROFILE
  • ORA-12170: TNS: 发生连接超时

    我尝试使用 Oracle Toad 连接到笔记本电脑中的数据库 但仍然出现此错误 ORA 12170 TNS 发生连接超时 我不断出现此错误的可能原因是什么 我昨天访问了同一个数据库并且能够访问它 收集评论里的答案 问题是Oracle服务运
  • R/RStudio、Yosemite 和 Java

    我昨天升级到 OSX Yosemite 当我跑步时library xlsx in RStudio 程序崩溃 我收到消息 要打开 RStudio 您需要安装旧版 Java SE 6 运行时 我得到相同的结果和关于打开的消息R当我跑步时libr
  • jQuery load() 函数不起作用

    我是 JavaScript 世界的新手 我正在尝试使用函数 load 插入另一个 html 文件 解释起来有点困难 代码如下 你能帮助我吗 我没有使用网络服务器 谢谢 为什么它不起作用 浏览器安全限制可能会阻止您使用 A
  • 无法消除我的子图像和父 div 之间奇怪的 2px 空间

    我已经尝试了我所知道的一切 我开始认为它是由 Tumblrs javascript 创建的 首先 我确实有内联块 我知道它们读取空白并添加像素 但经过多次测试 剥离了我所有的 javascript 并删除了所有内容 只留下了一个标准 div
  • 在 WPF 中将项目添加到组合框

    当我向 WPF 窗口添加组合框时 如何向组合框添加项目 Int 设计的 XAML 代码还是在 NameOfWindow xaml cs 文件中 情况 1 您没有数据源 您只需填充ComboBox静态值如下 来自 XAML
  • 在 Pycharm 中过滤记录器控制台输出的简单方法?

    我已经通过该程序命名了我的所有记录器 我想做的是能够通过 Pycharm 中的记录器名称过滤控制台日志输出 可以在不编辑日志配置文件的情况下完成此操作吗 您可以使用以下命令在 PyCharm 的控制台窗口中过滤输出格雷普控制台 https
  • 如何非递归地获取二叉树中叶节点的数量?

    我有一个练习问题被难住了 在不使用递归的情况下获取二叉树中叶节点的数量 我已经四处寻找一些想法 我已经看到了一些想法 例如将节点传递到堆栈 但我不知道当有多个分支时如何做到这一点 任何人都可以提供指针吗 NumberOfLeafNodes
  • 为每个文件运行气流 DAG

    所以我在airflow中有一个非常好的DAG 它基本上在二进制文件上运行几个分析步骤 作为airflow插件实现 DAG 由 ftp 传感器触发 该传感器仅检查 ftp 服务器上是否有新文件 然后启动整个工作流程 所以目前的工作流程是这样的
  • 将数据从浏览器发送到服务器并返回

    我是 C 开发人员 很长一段时间以来我没有真正跟进任何与 Web 相关的开发 我有一个想要实施的项目 实际上是为了赶上这些技术 我的项目是这样的 在浏览器中显示一些内容 例如使用画布和 WebGL 的 3D 场景的内容 在页面上有一个按钮
  • 从出生日期提取的年龄总是出现不一致的情况

    我使用以下代码将用户提供的出生日期转换为当前日期的等效年份 输出在年份中的偏差总是不一致 而在天和月中的偏差则非常大 NSDateFormatter tempFormatter NSDateFormatter alloc init temp
  • 为静态库编译 SWIG Python 包装器?

    这是一个菜鸟问题 我正在尝试学习如何使用 SWIG 为 C 库制作 python 接口 该库是专有的第三方库 它以头文件 foo h 和静态存档 libfoo a 的形式出现在我面前 为了简化问题 我编造了一个我认为具有相同病理学的例子 无
  • pdfkit-警告:阻止访问文件

    在 HTML 文件中使用本地图像时 使用 pdfkit 库将 HTML 转换为 pdf 时出现错误 阻止对文件的访问 如何在 HTML 文件中使用本地图像 我遇到了同样的问题 我通过向 pdfkit from file 添加 enable
  • 深层复制 System.Windows.Forms.WebBrowser 对象/恢复状态

    本质上 我想要做的是复制一个 WebBrowser 对象 以便我可以执行相当于 在新选项卡中打开 或 在新窗口中打开 操作 从而维护任何已发布的数据 我不仅仅想导航到与原始 WebBrowser 对象中相同的 URL 而是想重复 HttpW
  • 许多库上的 APK META-INF 中复制的重复文件?

    我在尝试构建 APK 时收到此错误 错误 任务 app transformResourcesWithMergeJavaResForDebug 执行失败 com android build api transform TransformExc
  • 为什么我应该使用&而不是&?

    我为什么要使用 amp 代替 为我的网站编写 HTML 时 在哪里可以找到我应该编码的其他符号的列表 酒吧 也是吧 如果我将符号按原样粘贴到 html 中 可能会遇到什么问题 事情是 我有一些附属链接 我担心 如果我在某些情况下用 编写它们
  • PTVS 和 numpy System.Int64 转换中的 numpy 64 位支持

    我正在尝试使用 IronPython 和 numpy 编写一些调用 NET 程序集的代码 版本信息 numpy 2 0 0 1 scipy 1 0 0 2 铁Python 2 7 1 我根据此处给出的说明安装了 scipy 和 numpy
  • UIViewContentModeScaleAspectFill 不裁剪

    我正在尝试使用以下命令以固定尺寸 100x100 绘制一些缩略图UIImageView 我将图像视图的帧大小设置为 100x100 并将contentMode to UIViewContentModeScaleAspectFill 我的理解
  • ruby irb 在 Windows 上使用 gitbash shell - 无法使用箭头键修改命令输入?

    当我执行 Rails Console 时 我的 git bash shell 允许我使用向上箭头来调用命令 并使用向左 向右箭头来修改我输入的文本 当我跑步时irbshell 忽略退格键和箭头键 我不确定为什么箭头键在 Rails 控制台的
  • 使用数据中的参数调用 C# 方法

    比如说 我有一个像这样的 XML 字符串