2014-09-22 42 views
-3

我有一個沒有標準錯誤處理方式的大解決方案。最近我發現了很多有try/finally塊的方法。沒有catch塊。 我如何找到所有這類事情?如何查找沒有catch塊的try塊?

+5

爲什麼你希望找到的這一切發生? – krisdyson 2014-09-22 18:39:23

+2

爲什麼只搜索「finally」是不夠的? – 2014-09-22 18:41:45

+1

搜索'finally'並查看在它之前是否有catch塊? – 2014-09-22 18:42:04

回答

2

try不一定意味着該塊可能會引發錯誤。對於懶惰的程序員來說,它有時候是語法上的糖。

假定你希望return一個值,然後修改這個值。你可以寫爲:

public int Foo() { 
    int old = this.value; 
    this.value = 5; 
    return old; 
} 

但還有一個更簡便的方法是:

public int Foo() { 
    try { 
     return this.value; 
    } finally { 
     this.value = 5; 
    } 
} 

你可以說第二個實現較長,但總的來說,這是不正確的。此外,它可以防止顯式地存儲old值。第二個實現更具可讀性,因爲它陳述了程序員的意圖,所以不太容易出錯。

有人可能會爭辯說,這使得try關鍵字比第一位可能更加模糊。一個更好的關鍵詞可能是比較合適的...


據我所知,有檢查try塊沒有catch塊沒有簡單的方法。你可以指望一個Regex會使用@"try\d*{[^}]*}\d*finally\d{[^}]*}找到的實例(例如,而是說有在tryfinally塊額外的範圍,那麼Regex不會檢測這一點。最簡單的可能是複製上下文無關語法C#/ Vb.Net,然後在try/catch/finally塊的結構做適當的檢查和打印的情況下,它不包含catch塊。

+0

謝謝@CommuSoft – 2014-10-02 13:53:59