如何区分泛型中的MethodBase

2023-12-06

我有一个基于的缓存

Dictionary<MethodBase, string>

密钥是从 MethodBase.GetCurrentMethod 呈现的。在显式声明方法之前,一切都工作正常。但有一天,出现了这样的情况:

Method1<T>(string value)

当 T 获得完全不同的类型时,在字典中生成相同的条目。

所以我的问题是关于缓存泛型方法的值的更好方法。 (当然我可以提供提供 GetCache 和相等遇到泛型类型的包装器,但这种方式看起来不太优雅)。

Update这就是我真正想要的:

static Dictionary<MethodBase, string> cache = new Dictionary<MethodBase, string>();
static void Method1<T>(T g) 
{
    MethodBase m1 = MethodBase.GetCurrentMethod();
    cache[m1] = "m1:" + typeof(T);
}
public static void Main(string[] args)
{
    Method1("qwe");
    Method1<Stream>(null);
    Console.WriteLine("===Here MUST be exactly 2 entry, but only 1 appears==");
    foreach(KeyValuePair<MethodBase, string> kv in cache)
        Console.WriteLine("{0}--{1}", kv.Key, kv.Value);
}

Use 生成通用方法, 如果可以的话:

using System;
using System.Collections.Generic;
using System.Reflection;

class Program
{
    static Dictionary<MethodBase, string> cache = new Dictionary<MethodBase, string>();

    static void Main()
    {
        Method1(default(int));
        Method1(default(string));
        Console.ReadLine();
    }

    static void Method1<T>(T g)
    {
        var m1 = (MethodInfo)MethodBase.GetCurrentMethod();
        var genericM1 = m1.MakeGenericMethod(typeof(T)); // <-- This distinguishes the generic types
        cache[genericM1] = "m1:" + typeof(T);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何区分泛型中的MethodBase 的相关文章

随机推荐

  • Python argparse 与 nargs 行为不正确

    这是我的 argparse 示例 即sample py import argparse parser argparse ArgumentParser parser add argument p nargs help Stuff args p
  • Convert.ToString(DateTime) 产生英国格式而不是美国格式

    我遇到一个问题 C DateTime 字符串无法转换为 SQL DateTime 因为它神秘地被格式化为英国日期 dd MM yyyy 以下是这一系列事件 在美国的远程服务器上创建一个对象并序列化为 xml 该 xml 在 CA 的本地计算
  • 矩形中的菱形 HTML 和 CSS3

    我想在矩形中制作一颗钻石 我已经用正方形做到了 box width 100px height 100px background orange z index 1 position relative box before position a
  • 如何使用Python匹配文件并将其移动到相应的文件夹中

    我对编程相当陌生 这是我第一次尝试使用 Python 创建复杂的脚本 我创建的程序的目的是 浏览文件列表 单个文件夹中总共 360 个文件 提取文件名中的 3 个唯一字符并根据这 3 个字符创建一个文件夹 总共 60 个唯一文件夹 创建一个
  • 使用 IN 指令通过准备好的语句进行搜索

    我的目的是查找表中与存储在字符串中的集合匹配的所有项目 array array item1 item2 item3 item4 This is dynamically filled this is just an example in li
  • VS 2017 程序无法识别“scoped_lock”

    我在 VS 2017 中使用scoped locked 时遇到了问题 我相信我将它们追溯到
  • JavaFX 表列,SceneBuilder 未填充

    我一直在看教程 但似乎无法找到表格来填充 我也在使用 net beans 和 scenebuilder 任何帮助将不胜感激 奋斗了5个小时 这是我的代码Controller class public class FXMLDocumentCo
  • Mysql 无法连接,因为目标机主动拒绝

    我知道已经有很多人问过这个问题 但是这些人大多忘记了密码或被防火墙阻止 而我没有这种情况 我正在使用 php 进行开发 我需要连接到远程数据库以便让我的所有团队都可以使用它 localhost 一切正常 但是当我尝试切换时 它给了我这个错误
  • 类型错误:“模块”对象不可调用

    File C Users Administrator Documents Mibot oops blinkserv py line 82 in init self serv socket AF INET SOCK STREAM TypeEr
  • iBook 页面翻转过渡

    我正在尝试为 pdf 阅读器应用程序在横向模式下重新创建类似 iBook 的页面过渡 我只需要动画 不需要像 iBook 应用程序那样的触摸处理 用户通过简单的滑动即可翻页 我尝试了不同的示例代码 包括Leaves 但我找不到任何简单的东西
  • 在 M1 Mac 上的 Rosetta 2 模拟下,Ansible 返回的“ansible_machine”和“ansible_architecture”是什么

    在 M1 MacBook 上 ansible architecture and ansible machine返回相同的值arm64 shuuji3 momo mac dev playbook gt ansible m setup loca
  • 执行流程链

    public void ExecuteProcessChain string asProcesses string sInRedirect string sOutRedirect Process p1 new Process p1 Star
  • 如何获取外部控制器当前的$sce?

    为了获取控制器外部的当前 scope 我可以使用 var scope angular element ng controller ProductCtrl scope 如何获取当前控制器 sce The sce是一项服务 因此您可以使用注入器
  • 如何创建 .jar 文件?

    In the tutorial我发现jar文件可以通过以下方式创建 jar cf jar file input file s 但是 尚不清楚输入文件是什么 那是 java 文件还是 class 文件 从同一页面上的示例中 我可以假设应该是
  • json_encode 具有私有属性的对象数组

    我正在寻找一种对对象数组使用 json encode 的有效方法 我遇到的问题是我的对象都有私有属性 使用 getters 和 setters 并且 json encode 不会将它们拉进来 所以我为一个对象创建了一个 jsonSerial
  • Java 中 isDirectory 和 isFile 的 File 始终返回 false

    为什么文件返回 falseisFile 方法 即使它是文件 当它是目录时 它返回 falseisDirectory 难道我做错了什么 我测试的这些文件 目录不存在 我需要创建它们 所以这就是我测试是否应该使用的原因createFile or
  • 使用 jQuery 获取当前事件处理程序的值

    我可以通过调用使用 jQuery 设置 onclick 处理程序 id click function console log click 同样使用 jQuery 我如何获取当前正在处理 click 事件的函数的引用 原因是我有另一个对象 并
  • 当outputDirectory或outputFileName更改时启动调试应用程序时AS找不到apk

    我正在使用 Android Studio 来调试我的应用程序 由于某些原因 我必须更改默认输出 apk 目录和文件名 所以我在应用程序的build gradle脚本中更改了applicationVariants的outputDirector
  • Java While 循环中的字符串条件

    我试图提示用户给我三个字符串之一 阿姆斯特丹 列克星敦 和 麦迪逊 如果用户没有输入这些字符串之一 则应反复提示他们 直到他们输入为止 当我输入一个应该可接受的字符串 例如 列克星敦 时 我仍然收到 请输入有效的城市 谁能告诉我当我否定其中
  • 如何区分泛型中的MethodBase

    我有一个基于的缓存 Dictionary