相关疑难解决方法(0)

你能用反射来找到当前正在执行的方法的名称吗?

就像标题所说:反射可以为您提供当前正在执行的方法的名称.

由于海森堡的问题,我倾向于不猜.如何在不改变当前方法的情况下调用一种方法来告诉您当前的方法?但是我希望有人可以在那里证明我的错.

更新:

  • 第2部分:这可以用来查看属性的内部代码吗?
  • 第3部分:性能如何?

最终结果
我了解了MethodBase.GetCurrentMethod().我还了解到,我不仅可以创建堆栈跟踪,而且如果需要,我只能创建我需要的确切帧.

要在属性中使用它,只需使用.Substring(4)删除'set_'或'get_'.

.net reflection

198
推荐指数
10
解决办法
6万
查看次数

如何查找调用方法C#的完整名称

如何在c#中找到调用方法的全名.我见过解决方案:

我如何在C#中获取调用方法

如何找到调用当前方法的方法?

从Called函数获取调用函数名称

但他们只给我顶级水平.考虑这个例子:

namespace Sandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            test();
        }

        static void test()
        {
            var stackTrace = new StackTrace();
            var methodBase = stackTrace.GetFrame(1).GetMethod();
            Console.WriteLine(methodBase.Name);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这只是输出'Main'如何让它打印'Sandbox.Program.Main'?

在任何人开始询问我为什么需要使用它之前,它是一个我正在处理的简单日志框架.

编辑

添加到Matzi的答案:

这是解决方案:

namespace Sandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            test();
        }

        static void test()
        {
            var stackTrace = new StackTrace();
            var methodBase = stackTrace.GetFrame(1).GetMethod();
            var Class = methodBase.ReflectedType;
            var Namespace = Class.Namespace;         //Added finding the namespace
            Console.WriteLine(Namespace + …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection

19
推荐指数
1
解决办法
2万
查看次数

在c#中获取函数名称

在Unity中使用coroutines或InvokeRepeating时,您必须提供一个字符串,其中包含您要调用的函数的名称.虽然如果更改该函数的名称会很痛苦,因为您必须记住更改使用它的协同程序.这样做有更干净的方法吗?

目前它看起来像这样:

InvokeRepeating ("SendChangedValues", SEND_RATE, SEND_RATE);
Run Code Online (Sandbox Code Playgroud)

虽然有类似的东西会很好

InvokeRepeating (SendChangedValues.Name(), SEND_RATE, SEND_RATE); //or
InvokeRepeating (functions.GetName(SendChangedValues), SEND_RATE, SEND_RATE);
Run Code Online (Sandbox Code Playgroud)

这可能在c#中吗?或者其他确保我在更改函数名称而不更改这些字符串时收到错误/警告的内容.

编辑1:我能想到的最干净的事情是使用函数的名称创建一个const字符串,并将它放在函数本身之前.因此,更难忘记更改字符串,因为它就在它上面,而且我也只需要更改一个const字符串来更改所有协同程序.

谢谢!

c# unity-game-engine

12
推荐指数
1
解决办法
4056
查看次数

有没有办法在c#中动态获取方法名称?

我有一个案例,我将方法名称作为字符串传递给函数,但我不希望它硬编码.例如

void MyMethodName()
{
    // some code
}

void SomeOtherMethod()
{
    SomeExternalLibrary.ExternalClass.FunctionWithStringParameter("MyMethodName");
}
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

FunctionWithStringParameter(MyMethodName.ToString());
Run Code Online (Sandbox Code Playgroud)

这样我可以通过"查找所有引用"来跟踪方法调用,并且我可以毫无后顾之忧地使用重构.

c# reflection method-names

3
推荐指数
1
解决办法
150
查看次数

标签 统计

c# ×3

reflection ×3

.net ×2

method-names ×1

unity-game-engine ×1