相关疑难解决方法(0)

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

登录C#时,如何学习调用当前方法的方法的名称?我知道所有这些System.Reflection.MethodBase.GetCurrentMethod(),但我想在堆栈跟踪中向下迈出一步.我考虑过解析堆栈跟踪,但我希望找到一种更清晰,更明确的方法,比如Assembly.GetCallingAssembly()方法.

.net c# logging system.diagnostics stack-trace

465
推荐指数
11
解决办法
21万
查看次数

如何查找调用方法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万
查看次数

获取强类型接口方法的名称

我有一个像这个例子的界面:

Interface IRequest{

  List<profile> GetProfiles();
  void SetProfile (Profile p);
}
Run Code Online (Sandbox Code Playgroud)

现在,在某些日志记录组件中,我无法访问实现该接口的对象,但我想使用接口中方法的名称.我当然可以将它们键入为字符串(将方法名称复制到字符串中),但我想使用强类型,因此我不必保持方法名称和字符串同步.

在伪代码中,我会这样做:

string s= IRequest.GetProfiles.ToString()
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

编辑:

也许我应该调用它:使用接口,就像它是一个枚举字符串s = IRequest.GetProfiles.ToString()

c# c#-4.0

4
推荐指数
2
解决办法
4467
查看次数

是否可以仅从另一个函数中调用函数?

在C#中是否可以创建一个只能从另一个函数中调用的函数?

你可以这样做吗?

private void a()
{


b();
c();
...do something else

private void b()
{
  ..do something but can only be called from a()
}

private void c()
{
  ..do something but can only be called from a()
}

}
Run Code Online (Sandbox Code Playgroud)

我想要这样做的原因是该功能b()c()拆分一些实现细节,a()它们只是更清晰,更容易在自己的范围内阅读.但是,这些函数对于类没有用,因为a()在调用它们之后必须进行一些处理.

c# function

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