2011-09-08 16 views
-3
public string Valid(OleDbDataReader myreader, int stval) 
{ 
    object val = myreader[stval]; 

    if (val != DBNull.Value) 
    { 
     return val.ToString() ; 
    } 
    else 
    { 
     Convert.ToString(0); 
    } 
} 

有一個錯誤「並不是所有的代碼路徑返回一個值」 請幫什麼導致錯誤「不是所有的代碼路徑都返回一個值」?

+2

您認爲錯誤的含義是什麼? – thekip

+0

@thekip並非所有的代碼路徑都返回一個值。 :) – 2011-09-08 06:37:39

+2

你的'else .....'塊不會**返回任何值....這就是錯誤清楚說明的內容..... –

回答

3

您需要了解的C函數基礎。

作爲返回字符串值的函數,它必須在所有情況下都返回一個值。這也包括其他部分。

public string Valid(OleDbDataReader myreader, int stval) 
    { 
     object val = myreader[stval]; 
     if (val != DBNull.Value) 
     { 
      return val.ToString() ; 
     } 
     else 
     { 
      return Convert.ToString(0); //forgot to write return over her 
     } 
    } 
+0

或者,在這個特殊的情況下,或許更好的是,C#的功能:-) – paxdiablo

+0

@paxdiablo,不..我認爲他用C釘住了它。我實際上是要自己回答這個問題(快速瀏覽一下我的活動標籤應該讓你在閱讀後輕笑)。 –

+0

不要忘記標記asnwer爲接受,如果你有你想要的信息 –

3

當您創建,是爲了返回一個值的函數,你需要:如果有else部分被執行比你需要返回字符串值,但沒有返回有

的原因是以確保通過該函數的所有可能路徑最終返回一個值。

在你的情況下,沒有返回值,如果myreader[stval]等於DBNull.Value,因爲它會進入else條款,簡單地下移,到函數結束,返回什麼:

public string Valid(OleDbDataReader myreader, int stval) 
{ 
    object val = myreader[stval]; 
    if (val != DBNull.Value) 
    { 
     return val.ToString() ; 
    } 
    else 
    { 
     Convert.ToString(0); 
    } 
} 

我自己個人的看法是,這將更好的寫法如下:

public string Valid (OleDbDataReader myreader, int stval) { 
    object val = myreader[stval]; 

    if (val != DBNull.Value) 
     return val.ToString() ; 

    return Convert.ToString(0); 
} 

換句話說,它往往是更好地在最後提供一個默認的情況下,保證這不可能發生。我畏縮,每當我看到形式的代碼:

if something: 
    return or exit 
else: 
    do something else 

,因爲它是不必要的複雜性,並可能導致正是那種在你的問題在這裏所描述的問題(以及縮進地獄)。好得多(再次,這是我的意見,但它有多年的經驗支持)使用更簡單:

if something: 
    return or exit 
do something else 
相關問題