c# - 获取方法中的参数名称(并用作字典键?)

标签 c# reflection

我正在编写一个要集成到现有软件中的审计日志系统,数据库结构包括一个字段,用于存储有关正在记录的操作的详细信息。不必花哨;它不会被太多需要,当需要时,在大多数情况下,开发人员会读取它以找出调用了哪个方法以及调用了哪些参数,诸如此类。这意味着虽然它应该是人类可读的,但它不需要被任何东西解析。因此,与其大量重载或使用可怕的 switch case 字符串替换,我想出了一种编写详细信息 blob 的好方法,即通过日志记录调用来获取正在记录的操作所需的参数名称和值传给他们的。我做了一些研究,并在反射方法中发现了一些有前途的东西,但我还没有找到任何可以清楚地解释如何去做的东西。

这是我所追求的粗略模拟:

Dictionary<string,string> parameters = new Dictionary<string,string>();
foreach (Parameter p in MethodCall)
{
    parameters.Add(p.Name, p.Value.ToString());
}

LogEvent(EventType.Something, userID = thisUser, details = parameters);

我知道它可能比实践中的更复杂,但它为您提供了总体思路。在我的 LogEvent 方法中,有一些东西可以添加时间戳,为用户端日志查看器构造描述性句子(比我们向管理员和开发人员展示的技术细节要少,以免暴露我们的程序/数据库结构)以及 - 理论上 - 构建来自参数详细信息字典的某种 blob(可能是 JSON 或类似的)。

最佳答案

相关的是:Obtain parameter values from a stack frame in .NET?其中有一些有用的答案。

您想记录方法名称和参数列表。方法名称使用 StackFrame 很容易,但我认为您不能使用简单的反射来获取参数值。

关于c# - 获取方法中的参数名称(并用作字典键?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13251560/

相关文章:

C# ListView ItemSelectionChanged Event Multi Select 仅获取最后选择的项目

c# - 使用 C# Web 服务将图像从 Android 应用程序上传到服务器

c# - xbuild: 在项目中找不到目标。 C# 类库

java - 如何通过反射访问抽象父类中的实例字段?

c# - 是否可以通过 C# 中的反射检索文件信息?

c# - IsAssignableFrom() 在应该返回 true 时返回 false

java - 属性访问异常 : could not get a field value by reflection getter While using Hibernate

c# - 必须全部满足的NEST复合查询

c# - 在 C# 中使用多线程加速循环(问题)

c# - 如何使用反射从事件中获取底层委托(delegate)列表?