2015-08-21 125 views
-3

當我跟蹤,我認爲這將是像做獲取參數的舊名稱

//In the main function 
{ 
    Log(myVariable); 
} 

發送該變量的通用函數這樣

//In the Logger file 
public static void TraceMessage<T>(T aVariable) 
{ 
    string oldName=GetOldName(aVariable); 
} 

我想「有用myVariable「分配給oldNameGetOldName應該做什麼?類似

東西在這裏問:

get name of a variable or parameter

但在所有的這些情況下, 「aVariable」 被分配給oldName

更新:舊名稱是參數/變量在發送到函數之前被調用的內容。我只是爲了便於解釋而將它用作變量。 原因是調試。當我的程序收到錯誤時,我想知道我的變量的值是多少。我目前必須發送日誌(的錯誤,變量名稱,變量值)。當你寫這1000個Debug語句時,你會想到這可以簡化。我所要求的將簡化問題。

爲什麼我的問題得不到支持,我該如何改進問題?

+0

「oldName」是什麼意思? – EZI

+2

我不認爲這是可能的。我也不認爲這是必要的。你爲什麼需要這樣做? – David

+1

不要讓降價得到你。我已經贊成你,因爲我覺得這是一個有效的問題,即使它不存在實現你要求的方式。 – Douglas

回答

1

該信息需要被捕獲並由調用者提供。在C#6,它可以使用nameof運營商可以輕鬆實現,不過你需要在你的來電者的代碼應用此:

Log(myVariable, nameof(myVariable)); 

編輯:如果你只是想一次指定的變量,你可以使用方法:

Log(() => myVariable); 

,並定義Log方法:

public static void Log<T>(Expression<Func<T>> expression) 
{ 
    string oldName = ((MemberExpression)expression.Body).Member.Name; 
    object value = expression.Compile().Invoke(); 
} 

然而,這將大大小號低於替代方案,並且is not guaranteed behaviour

+0

編輯是一個非常好的解決方案,但如果沒有()=>,那會更好。 –

+0

在這種情況下,請保持打開問題。我很想知道是否有人存在。爲了記錄,由於我提到的問題(速度和缺乏規格),我個人不會在代碼中使用lambdas;我寧願去'Log(myVariable,nameof(myVariable))'。 – Douglas