簡體   English   中英

使用反射獲取參數名稱

[英]using reflection to get the name of a parameter

我有一個ac#.net 2.0CF應用程序,我不僅要獲取傳遞給函數的參數的類型和值,還要獲取變量名。

例如:

void Show<PARAM>(PARAM p)
{
    Debug.WriteLine(string.Format("{0} {1} = {2}", typeof(PARAM).ToString, ???, p.ToString() );
}

bool foo = true;
Show(foo);

將輸出“ bool foo = true”;

在C ++中,我可以使用##預處理程序宏來執行此操作。

如果無法在2.0中完成,可以在3.5或4.0中完成嗎?

謝謝PaulH

如果我沒記錯的話,反射是不可能的,因為變量名不在程序集中,而p是變量名。

using System.Reflection;


ParameterInfo[] info = MethodInfo.GetCurrentMethod().GetParameters();
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(false);
System.Diagnostics.StackFrame[] frames = trace.GetFrames();

我猜可以從堆棧框架中檢索值。

可以從

ParameterInfo [] info = MethodInfo.GetCurrentMethod()。GetParameters();

public void Show(int value)
    {
        ParameterInfo[] info = MethodInfo.GetCurrentMethod().GetParameters();
        Trace.WriteLine(string.Format("{0} {1}={2}", info[0].ParameterType.ToString(), info[0].Name, value.ToString()));
    }

輸出

System.Int32值= 10

嘗試使用PostSharp,它具有對Compact Framework的支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM