相當堅持這一個......我有這個問題,我們在一個Unity項目中使用log4Net來構建Windows商店應用程序。 log4Net需要聲明記錄器的類類型或名稱(作爲字符串)。由於Windows商店.NET修改它並沒有像GetCurrentMethod()常用的方法......我檢查周圍,到目前爲止,這是毫無希望:Windows商店應用程序.NET GetCurrentMethod()。DeclaringType替代
通常的方法是這樣的
public sealed class SomeClassController : ApiController
{
private static readonly ILog Log =
LoggerManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
...
How to get method name win 8 app - 解決方案這裏提供的不起作用,因爲[CallerMememberName]屬性返回調用者(不是聲明者)。 func(表達式表達式)方法不起作用,因爲它只適用於在方法內部使用,但不能用作類字段(這在log4Net中就是這種情況)。
另一種可能性是使用StackFrame,但幸運的是Windows存儲不支持它,唯一的方式來到StackTrace是通過一個異常,這是不是一個選項,因爲1.是真的很慢2.所有異常投擲必須在Unity生產中刪除。
像GetType()這樣簡單的解決方案不起作用,因爲如果有繼承類,它們會被重寫。更多這裏 - http://rundevrun.blogspot.lt/2012/11/gettype-vs-methodbasegetcurrentmethodde.html
我用盡了選擇,有沒有辦法得到DeclaringType,當在類字段中使用?
你不能只使用'typeof'的任何理由?是的,這不是簡單的粘貼,但它是一個更簡單的方法... –
有一些複雜的情況,它不是很清楚哪個類的類型將是一個類聲明它並使用通常不提及的方法必須指定它。 – MattJ
我會說,在那些複雜的情況下,使用'typeof'會更清晰 - 這就是非常非常明顯的結果。無論如何,你說你已經沒有選擇:我會說'typeof'絕對是一種選擇,它非常簡單。 –