gpt4 book ai didi

c# - 如何获取在 C# 中调用的先前方法的参数 IDictionary

转载 作者:太空狗 更新时间:2023-10-29 23:25:19 26 4
gpt4 key购买 nike

我希望能够以 IDictionary<string, object> 的形式获得参数列表之前调用的方法。有一个问题:我无法使用第三方的面向方面编程框架,即使它是免费的。

例如:

using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace Question {
internal class Program {
public static void Main(string[] args) {
var impl = new Implementation();
impl.MethodA(1, "two", new OtherClass { Name = "John", Age = 100 });
}
}

internal class Implementation {
public void MethodA(int param1, string param2, OtherClass param3) {
Logger.LogParameters();
}
}

internal class OtherClass {
public string Name { get; set; }
public int Age { get; set; }
}

internal class Logger {
public static void LogParameters() {
var parameters = GetParametersFromPreviousMethodCall();
foreach (var keyValuePair in parameters)
Console.WriteLine(keyValuePair.Key + "=" + keyValuePair.Value);
// keyValuePair.Value may return a object that maybe required to
// inspect to get a representation as a string.
}

private static IDictionary<string, object> GetParametersFromPreviousMethodCall() {
throw new NotImplementedException("I need help here!");
}
}
}

有什么建议或想法吗?如有必要,请随意使用反射。

最佳答案

你可以使用 StackTrace得到你需要的一切:

var trace = new System.Diagnostics.StackTrace();
var frame = trace.GetFrame(1); //previous
var method = frame.GetMethod();

现在你有一个 MethodBase实例。

您可以通过以下方式获取名称:

var method = method.Name;

和参数MethodBase.GetParameters .

例如:

var dict = new Dictionary<string, object>();
foreach (var param in method.GetParameters())
{
dict.Add(param.Name, param.DefaultValue);
}

关于c# - 如何获取在 C# 中调用的先前方法的参数 IDictionary<string, object>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10078611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com