【发布时间】:2012-04-22 04:29:25
【问题描述】:
这个问题和我之前的问题有关How to get a IDictionary<string, object> of the parameters previous method called in C#?。我写了代码,但仍然缺少一块。如何从参数中获取值?
如果执行以下代码,则输出只显示参数的名称,而不显示值。
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace Question {
internal class Program {
public static void Main(string[] args) {
var impl = new Implementation();
var otherClass = new OtherClass { Name = "John", Age = 100 };
impl.MethodA(1, "two", otherClass);
}
}
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);
}
private static IDictionary<string, object> GetParametersFromPreviousMethodCall() {
var stackTrace = new StackTrace();
var frame = stackTrace.GetFrame(2);
var method = frame.GetMethod();
var dictionary = new Dictionary<string, object>();
foreach (var parameterInfo in method.GetParameters())
dictionary.Add(parameterInfo.Name, parameterInfo.DefaultValue);
return dictionary;
}
}
}
【问题讨论】:
-
同一个问题不要问两次。
-
其实是2个问题。一种用于获取 ParameterInfo,另一种用于获取 Parameter 值。这些问题使用相同的示例,但它们不相关。
标签: c# .net reflection