如何检查 C# 中是否存在具有特定签名的方法?

2024-06-20

我想检查某些参数的方法是否已实现。在这种情况下,我有以下方法重载:

public class Transformations
{ 
    public string TransformFrom(string s) { return s;}
    public string TransformFrom(int i) { return "00" + i.ToString();}
    public string TransformFrom(DateTime dt) { return 
                       DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff");}
}

假设我有小数:

object obj = 1M;

如果我现在打电话TransformFrom(obj),我得到一个例外。

不幸的是,我的程序的其他部分仅返回对象,它们实际上是具体类型,如 int 或 datetime。我想将其中一些对象转换为字符串,以便将它们写入日志。所以这是一个运行时问题。另外,我希望我的 Transformations 类足够通用,也可以在其他程序中使用,因此可以有任何类型的对象。

有没有快速的方法来找出这个方法重载不存在?


无论哪种方式,即使存在接受小数的重载,您当前都会收到编译时错误。您可以根据您的需要采用以下两种方法之一:


要在编译时解决此问题,您必须强制转换为正确的类型。

object obj = 1;
var objAsInt = (int) obj;
var result = transformationInstance.TransformFrom(objAsInt);

如果没有适当的重载,您将收到编译时错误,您可以在设计时解决此错误。


要在运行时解决此问题,请使用反射来确定是否存在类型重载以及是否传递了实例。

object obj = 1;
var underlyingType = obj.GetType();
var method = typeof(Transformations).GetMethod("TransformFrom", new Type[] { underlyingType });
if(method != null)
{
    var result = method.Invoke(transformationInstance, new []{obj});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查 C# 中是否存在具有特定签名的方法? 的相关文章

随机推荐

  • 如何处理两个 gradle 插件的任务冲突?

    我使用 gradle 和两个插件com jfrog artifactory and io swagger core v3 swagger gradle plugin 现在我想按照此处所述进行配置https github com swagge
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • 使用 python 将 CSV 文件上传到 Microsoft Azure 存储帐户

    我正在尝试上传一个 csv使用 python 将文件写入 Microsoft Azure 存储帐户 我已经发现C sharp https blogs msdn microsoft com jmstall 2012 08 03 convert
  • 我找不到 IntelliJ 快捷方式

    我使用 vim 一段时间 我知道有一个 intellij vim 插件 我很好奇内置的 IntelliJ 文本导航存在什么 如何打开实时模板来创建模板 如何查看以 tr 开头的现有模板列表 如何进行全局搜索并在当前文档中进行搜索 然后转到下
  • NodeJS:如何获取服务器的端口?

    您经常会看到 Node 的示例 hello world 代码 它创建一个 Http Server 开始侦听端口 然后执行以下操作 console log Server is listening on port 8000 但理想情况下你会想要
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D
  • 使用剪贴板 SetText 换行

    如何使用 SetText 方法添加换行符 I tried Clipboard SetText eee n xxxx 但当我将剪贴板数据粘贴到记事本中时 它没有给我预期的结果 预期结果 eee xxxx 我怎样才能做到这一点 Windows
  • 如何使用NetLogo发送参数?

    我对 NetLogo 还很陌生 这就是我被困在这里几周的原因 我想做的是让特工分成 2 队 4 人一组 我的计划是让一个函数保存 4 个海龟 ID to assign groupmates a1 a2 a3 a4 并将他们分配到团队 1 a
  • Libgdx 和 Google 应用内购买结果

    我遵循了这些指示 https github com libgdx libgdx wiki Interfacing with platform specific code使用 ActionResolver 接口集成 Libgdx 和原生 An
  • 添加两个 ActiveRecord::Relation 对象[重复]

    这个问题在这里已经有答案了 如何将两个关系添加在一起 当我尝试 运算符时 它返回一个数组 但我需要它来返回关系 谢谢 麦克风 Try new relation relation merge another relation
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se
  • Tensorflow Eager Execution 不适用于学习率衰减

    在这里尝试让一个热切的执行模型与 LR 衰减一起工作 但没有成功 这似乎是一个错误 因为学习率衰减张量似乎没有更新 如果我遗漏了什么 你可以帮我一下吗 谢谢 下面的代码正在学习一些词嵌入 但是 那学习率衰减部分根本不起作用 class Wo
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in
  • 如何过滤 Solr 中多值字段返回的值

    我有一个文档 其中包含一个名为 uuid 的字段 该字段是一个列表 多值 每个文档最多可以有 100k 个值 例如 我想搜索与以 5ff6115e 开头的 uuid 匹配的文档 我已经可以通过使用成功做到这一点q uuids 5ff6115
  • 使用 JQuery 预填充选择字段的下拉选项验证

    我有这个 JQuery 片段来防止选择已在另一个字段中选择的下拉选项 var coll select name service on change function coll each function var val this value
  • 搜索引擎如何找到相关内容? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google 在解析网络时如何找到相关内容 例如 Google 使用 PHP 原生 DOM 库来解析内
  • 如何从 TraCIDem11p.cc 获取 RSU 坐标?

    我想知道如何开始编写一个能够在车辆靠近 RSU 时发送消息的程序 首先 我仍然对一些定义感到困惑 但是 一点一点地 我想我会学习静脉 module simulation getModuleByPath rsu 0 c MobilityAcc
  • 必须包含 log4J,但它会导致 Apache Spark shell 中出现错误。如何避免错误?

    由于我必须将 jar 包含到 Spark 代码中 因此我想请求帮助找出解决此问题而不删除 log4j 导入的方法 简单代码如下 cp symjar log4j 1 2 17 jar import org apache spark rdd v
  • 如何检查 C# 中是否存在具有特定签名的方法?

    我想检查某些参数的方法是否已实现 在这种情况下 我有以下方法重载 public class Transformations public string TransformFrom string s return s public strin