如何检索泛型方法的名称,包括泛型类型名称

2024-02-28

In C#,我有一个具有以下签名的方法:

List<T> Load<T>(Repository<T> repository) 

Inside Load()方法,我想转储完整的方法名称(用于调试目的),包括泛型类型。例如:打电话Load<SomeRepository>();会写"Load<SomeRepository>"

到目前为止我尝试过的:使用MethodBase.GetCurrentMethod() and GetGenericArguments()检索信息。

List<T> Load<T>(Repository<T> repository) 
{
   Debug.WriteLine(GetMethodName(MethodBase.GetCurrentMethod()));
}

string GetMethodName(MethodBase method)
{
     Type[] arguments = method.GetGenericArguments();
     if (arguments.Length > 0)
        return string.Format("{0}<{1}>", 
          method.Name, string.Join(", ", arguments.Select(x => x.Name)));
     else
        return method.Name;
}

检索方法名称有效,但对于通用参数,它总是返回我"T"。方法返回Load<T>代替Load<SomeRepository>(这是没用的)

我试过打电话GetGenericArguments()外部GetMethodName()并将其作为参数提供,但没有帮助。

我可以提供typeof(T)作为参数GetMethodName()(它会起作用)但随后它将特定于泛型类型的数量,例如:Load<T, U>除非我提供其他论点,否则它将不再起作用。


的答案是杰佩·斯蒂格·尼尔森 https://stackoverflow.com/a/19113261/2042090根据您的要求是正确的。事实上,你的解决方案返回T他返回运行时类型名称。如果您要求不同的东西,请尝试重写您的问题。以下是针对一个通用项目的另一种解决方案:

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        Load(new Repository<int>());
        Load(new Repository<string>());
        Console.ReadLine();
    }

    class Repository<T> { }

    static List<T> Load<T>(Repository<T> repository)
    {
        Console.WriteLine("Debug: List<{1}> Load<{1}>({0}<{1}> repository)", typeof(Repository<T>).Name, typeof(Repository<T>).GenericTypeArguments.First());
        return default(List<T>);
    }
}

这是您要求的输出:

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

如何检索泛型方法的名称,包括泛型类型名称 的相关文章

随机推荐

  • 是否存在作为典型内联块存在的 HTML 元素?

    The div是典型的块级元素 并且span是内联对应项 它们是该显示类型的最简单的形式 没有其他属性 在很多情况下 我会给它们中的任何一个风格 display inline block 这使得它们的行为方式非常方便 为了div这意味着盒子
  • JavaScript 基本替换同一字符串中的两个字符

    I have var foo bar foo replace replace 所以 我得到bar没有括号 有更好的方法吗 你可以使用 foo foo replace g 这涉及一个简单的正则表达式 它匹配左括号或右括号的所有实例 请注意 您
  • Ubuntu 重启后 Google Chrome 丢失 cookies [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 几天来我遇到了奇怪的问题 当我重新启动系统甚至重新登录时 我会在我登录或单击 记住我 的网站上注销 问题仅出现在 Google Chrom
  • 在 C# 中使用 MySQLConnection 无法正确关闭

    我尝试编写一个类来使 MySql 连接更容易 我的问题是 在我打开连接并关闭它之后 它在数据库中仍然打开并被中止 当然 我使用的是 using 语句 但连接仍然打开 并在退出程序后中止 我的代码如下所示 using DatabaseMana
  • 对大于屏幕尺寸的侧边栏进行位置粘性

    我有一个侧边栏 其高度大于屏幕尺寸 并且在使用时position sticky 除非滚动到页面末尾 否则我将无法看到侧边栏的底部 例如 如何确保滚动时页面的 50 已经显示侧边栏的下部 这里的代码示例 https jsfiddle net
  • ActionBar 操作项未显示[重复]

    这个问题在这里已经有答案了 我有一个非常简单的代码 但即使经过长时间的谷歌搜索也无法解决问题 我想在我的 ActionBar 中添加一些 Action Items 但是每当我运行应用程序时 我看到的只是一个带有应用程序徽标和标题的 Acti
  • 如何使用 OAuth 2 - OAuth 2 C# 示例

    我必须弄清楚如何使用 OAuth 2 才能使用 Deviantart api 我得到了 client id 和 client secret 部分 这是他们提供的信息 端点 使用 OAuth 2 0 向我们进行身份验证时所需的唯一信息是cli
  • 关于 try-catch 块的思考

    您对如下代码有何看法 public void doSomething try actual code goes here catch Exception ex throw 我看到的问题是实际的错误没有得到处理 只是将异常抛出到不同的地方 我
  • 避免 C++ 中的非正规值

    在寻找了很长时间的性能错误之后 我读到了有关非正规浮点值的内容 显然 非规范化浮点值可能是一个主要的性能问题 如本问题所示 为什么将 0 1f 更改为 0 会使性能降低 10 倍 https stackoverflow com questi
  • 如何在 React 组件之外访问历史对象

    首先 我对这个领域非常熟悉带路由器 https reacttraining com react router web api withRouter然而 在这种情况下 HoC 没有帮助 因为我不想访问history组件中的对象 我正在尝试实现
  • 将 IO 输出收集到列表中

    我怎样才能发出多个呼叫SDL pollEvent IO Event http hackage haskell org packages archive SDL 0 6 2 doc html Graphics UI SDL Events ht
  • 抛出异常后继续循环迭代

    假设我有这样的代码 try for int i 0 i lt 10 i if i 2 i 4 throw new Exception Test i catch Exception ex errorLog AppendLine ex Mess
  • MySQL 匹配 - 在布尔模式下?

    我正在使用 PDO 执行 MATCH AGAINST 查询 以下内容不返回任何内容 SELECT title author isbn MATCH title isbn AGAINST term AS score FROM books WHE
  • 将txt转换为xlsx的Powershell脚本

    我想将文本文件转换为 Excel 格式 我使用来自 Technet 的以下脚本 Script name ConvertTilde ps1 Created on 2007 01 06 Author Kent Finkle Purpose Ho
  • 使用鼠标选择日期时,JQuery UI Datepicker 失去焦点

    我将 JQuery ui 与日期选择器一起使用 当用户点击某个字段时 他们会适当地弹出日历 用户选项卡 通过按键进入字段 用户通过鼠标单击选择日期 用户选项卡 Tabindex 从 1 开始 在表单的开头 这是代码 也可能设置选项卡索引
  • 如何创建很棒的字体图标的禁用状态?

    我正在使用很棒的字体图标 并且我需要使图标处于禁用状态 有什么办法可以做到这一点吗 我也在使用引导程序 这就是我使用图标的方式 i class fa fa slack i i 我只需要图标看起来像灰色的 为残疾人编写一个自定义类 就像是 f
  • 单元测试期间 Ada 中的异常处理

    我正在尝试为我最近编写的一些 Ada 代码编写一些单元测试 我有一个特殊的情况 我希望得到一个异常 如果代码工作正常 我不会 但在这种情况下我所做的只是测试 而不是编写代码 如果我在测试例程中处理异常 那么我不知道如何继续在该过程中进行测试
  • R/shiny + mathjax,不渲染数学

    我的行为很奇怪MathJax and shiny 我已经修改了01 hello示例来自shiny包包括一个 Rmd文件通过includeMarkdown 我修改的只是ui R如下 Show a plot of the generated d
  • 在我的 CentOS 机器上找不到wireshark init.lua

    所以我试图在我的 CentOS 7 服务器上获取一个与 tshark 一起使用的脚本 但我遇到了问题 该脚本在我的Windows笔记本电脑上运行良好 我只是将其放在appdata的plugins文件夹中 但我在linux上找不到类似的位置
  • 如何检索泛型方法的名称,包括泛型类型名称

    In C 我有一个具有以下签名的方法 List