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

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

はあなたがC関数の基本について読む必要が「すべてのコードパスが値を返すわけではない」というエラーの原因

+2

エラーは何を意味していますか?これは、エラーが発生しましたか? – thekip

+0

@thekipすべてのコードパスが値を返すわけではありません。 :) –

+2

あなたの 'else .....'ブロックは何も返しません**エラーは明らかにエラーの内容です..... –

答えて

3

助けてください 「ではない、すべてのコードパスが値を返す」エラーがあります。

文字列値を返す関数として、すべての場合に値を返す必要があります。これにはelse部分も含まれます。あなたが値を返すように意図された関数を作成するとき

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に等しい場合は、あなたの場合は

は、何の値が返されません。

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 
関連する問題