我們目前正在開發一個日誌記錄解決方案,並實現了一個名爲「Log」的擴展方法。在寫入日誌文件時,我們理想的情況是編寫原始變量名稱(而不是擴展方法中使用的變量名稱)。從擴展方法中獲取原始變量名稱
我們的用戶目前該做的是:
public void DoSomeWork()
{
String testString = "Hey look I'm a string!";
testString.Log("testString value");
}
有了進一步擴展方法:
public static String Log(this String valueToStore, String name)
{
// The logging code which uses the 'name' parameter
}
這裏的問題是,它難以閱讀的代碼更長的線和看起來聚集。什麼是理想的是這樣的:
public void DoSomeWork()
{
String testString = "Hey look I'm a string!";
testString.Log();
}
隨着擴展方法:
public static String Log(this String valueToStore)
{
// The logging code which is able to retrieve the
// value 'testString' from the 'valueToStore' value
}
通過使用反射這在所有可能的?我知道nameof
選項,但只在擴展方法中使用時才返回字符串'valueToStore'。
我不認爲這是可能的。這些信息在執行時會丟失(一個變量甚至不是您可以反思的屬性或字段)。你可以遍歷堆棧框架並檢查它的字符串變量的調用方法,但這沒有幫助。順便說一句:你會期望從「hello world」.Log()'? –
擴展方法是否不需要保持鏈接到被調用的地方?我知道這是不可能使用常規方法,但認爲擴展方法可能會提供一些額外的 –
不,擴展方法只是語法糖。你的例子中的'testString.Log()'和'YourExtensionClass.Log(testString)'沒有區別。 –