如何在不使用try catch的情況下驗證事件日誌寫入權限?我已閱讀以下問題:Checking Event Log writing Permissions without writing an entry,但答案建議使用EventLogPermissionAttribute
。據我所知,我不能用它來驗證權限,它只是在沒有請求的權限時拋出一個Exception
。驗證事件日誌寫入權限
我的代碼現在看起來是這樣的:
public void WriteMessage(string message)
{
try {
var trace = new TraceSource("MySource");
trace.TraceEvent(TraceEventType.Information, 1000, message);
} catch() {
var log = LogManager.GetLogger<MyClass>();
log.Info(message);
}
}
不過,我想是這樣的:
public void WriteMessage(string message)
{
if(EventLogPermission("MySource"))
{
var trace = new TraceSource("MySource");
trace.TraceEvent(TraceEventType.Information, 1000, message);
} else {
var log = LogManager.GetLogger<MyClass>();
log.Info(message);
}
}
Ofcourse在結束它並沒有太大的差別,但使用嘗試捕捉因爲邏輯只是感覺骯髒。
我尋找一個非try-catch選項,但還沒有找到替代方案。所以,試一下就可以了,除此之外,如果可能的話,這不應該被視爲可接受的程序流程。 – Hans
另外,在某些語言中(例如python),在某些情況下,異常是處理某些*異常*條件的首選方式。這只是一種不同的方法:LBYL(看你跳躍之前)vs EAFP(比容許更容易要求原諒)。 – J0HN
謝謝@ J0HN從不同的角度獲得不同的觀點總是很好的。 –