问题标签 [methodbase]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
161 浏览

.net - 如何区分泛型中的MethodBase

我有一个基于

键是从 MethodBase.GetCurrentMethod 呈现的。在明确声明方法之前,一切正常。但有一天,似乎:

当 T 获得完全不同的类型时,在 Dictionary 中输入相同的条目。

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

在这里更新 我真正想要的:

0 投票
2 回答
155 浏览

.net - 检测 MethodBase 的泛型参数

这个问题是如何在泛型中区分 MethodBase 的继续

简而言之:当调用不同的泛型类型替换时,我需要在字典中区分相同的泛型方法。

所以,我重写了 IEqualityComparer,逐个比较 MethodBase 参数。在调试过程中,我想知道没有办法检测泛型方法的真实参数类型,GetGenericArguments 和 GetParameters 都不提供真实类型的调用。我对吗?如果是这样,除了通过第一行 Environment.StackTrace 进行比较之外,我看不到其他方法 - 因为只有这种方法才能探索参数的类型。

0 投票
1 回答
1919 浏览

c# - 在构造函数上调用 MethodBase 的 Invoke(反射)

首先,对不起,如果以前有人问过这个问题。我已经进行了非常全面的搜索,但没有发现任何类似的东西,但我可能错过了一些东西。

现在问题是:我试图通过反射调用构造函数,但没有运气。基本上,我有一个我想克隆的对象,所以我在复制构造函数中查找它的类型,然后想要调用它。这是我所拥有的:

我这样称呼上面的方法:

现在,请注意我使用的调用方法是MethodBase调用。ConstructorInfo提供了一个调用方法,如果像这样调用它就可以工作:

但是,我想使用MethodBase' 的方法,因为实际上我不是每次都查找复制构造函数,而是将它存储在字典中,而字典包含方法和构造函数,所以它是 a Dictionary<MethodBase>,而不是Dictionary<ConstructorInfo>。我当然可以ConstructorInfo像上面那样强制转换,但我宁愿避免强制转换并MethodBase直接使用该方法。我只是想不出正确的参数。

有什么帮助吗?非常感谢。


编辑

本杰明,
非常感谢您的建议。实际上,我正在按照您在第二次编辑中的建议进行操作,除了(这是一个很大的“例外”)我的字典在哪里

And then I called ClonerMethod's invoke on what I found in the dictionary. I didn't add the code the deals with all that because the answer I was looking for was just how to call Invoke on a ConstructorInfo using MethodBase's Invoke method, so I didn't want to add unnecessary info and too much code for you guys to read through. However, I like your use of Func<,> much MUCH better, so I'm switching to that. Also making the Clone method generic is a nice addition, but in my case the caller doesn't know the type of the object, so I'll keep it non-generic instead.

I didn't know about Func<,>, and if I knew about the lambda operator I had forgotten (I hadn't really needed something like this before), so I've actually learnt a lot from your answer. I always love to learn new things, and this will come in very handy in the future, so thanks a lot! :)

0 投票
2 回答
14065 浏览

c# - MethodBase.GetCurrentMethod() 性能?

我编写了一个日志类和一个函数,如下代码所示:

每次我记录一些东西时,我也会记录来自 methodBase.Name 和 methodBase.DeclaringType.Name 的类名。

我阅读了使用 Get CurrentMethod的以下帖子,我注意到这种方法很慢。

我应该使用 this.GetType() 而不是 System.Reflection.MethodBase 还是应该在我的日志中手动记录类/方法名称,例如 Log("ClassName.MethodName", "log message)?最佳实践是什么?

0 投票
2 回答
2920 浏览

c# - 如何通过反射读取方法体

是否可以通过反射找出有关 Method 主体的任何信息?

如何?

0 投票
1 回答
6480 浏览

c# - 如何获取方法的 MethodBase 对象?

我正在尝试使用在这篇文章中找到的类,但它需要一个 MethodBase 才能运行。

我阅读了获取 MethodBase 对象的最快方法是什么?但我无法找到任何解决方案。

我需要做的是从函数中获取 MethodBase 对象。

例如获取类 Console 的静态函数 WriteLine() 的 MethodBase 或获取 List<> 的非静态函数 Add() 的 MethodBase。

谢谢你的帮助!

0 投票
1 回答
6688 浏览

c# - 为方法参数赋值

想象一个具有以下签名的方法:

根据 的值,data需要将 in 的值分配给ABCid。简而言之,如果id == "A"那时A = data;

问题是这个方法的主体是由人输入的,但签名是在运行时生成的。因此,不可能对逻辑进行硬编码,因为在设计时不知道会有多少 ref 参数以及它们被称为什么。这段代码可以插入到任意数量的方法中,每个方法都可能具有不同的签名,并且它必须在每个方法中工作。

我知道如何获取当前方法之一的所有参数,但我不知道如何为这些参数之一赋值。我正在寻找的是以下内容:

0 投票
1 回答
253 浏览

c# - MethodBody.LocalVariables Count 令人困惑

对于没有局部变量的简单方法,如下所示

MethodInfo.GetMethodBody().LocalVariables.Count = 2 为什么?添加另一个 switch 语句,计数变为 3 WHY?

没有定义局部变量。那么为什么是 2 和 3。另外,如果另一个带有 j 的 switch 语句将计数保持在 2。

0 投票
2 回答
220 浏览

c# - 检查方法是否使用 PInvoke

无论如何要检查方法是否使用 PInvoke ?我正在使用 MethodBase 遍历程序集中的所有方法,但我想检查该方法是否使用 PInvoke。这是我正在使用的代码:

另外,如果可能的话,有什么方法可以检查正在使用的 DLL 和正在调用的函数/入口点?

0 投票
7 回答
17246 浏览

c# - MoveNext instead of actual method/task name

Using log4net declared as:

In an async method or task, like this one:

logs MoveNext instead of CheckSomething. Any idea how to make it log an actual method name?