2010-11-29 12 views
3

私は困惑しています。最初の行と4行目がnullに評価されないのはなぜですか?Convert.ToString()内の条件式が間違って評価されていますか?

null wut

ポスト答え編集:

他人の利益のために、望ましい行動を使用して作成されます:

boolFoo ? null : Convert.ToString(DBNull.Value) 

Convert.ToString()nullが暗示ので、これは動作します一般的なタイプのです。

答えて

3

first_expressionsecond_expressionの種類は同じである必要があり、または暗黙的な変換は、他の1つのタイプから存在する必要があります。この場合

nullが暗黙的にSystem.Objectに変換されているように、それが見えます。 MSDNのドキュメントをさらに詳しく調べると、Convert.ToString(Object value)は、valuenullの場合、String.Emptyを返します。 Convert.ToString(null)ない暗黙的に(あなたが?:演算子を使用していないので)System.Objectnullの変換を行うよう

これは、あなたのポストで6行目と同じではありません。

+0

6行目でConvert.ToString(null)をnullとして評価し、String.Emptyではないと評価していません。 [これを無視する。 ]あなたがあなたのコメントを変更する前に書かれました。] – bblack

0

nullです。タイプはDBNullです。 ?: operatorためのMSDNのドキュメントから

+0

型はDBNullではありません。それは文字列です。 – bblack

2

nullと評価されているようですが、Convert.ToString(object)nullの値をString.Emptyと返します。 Convert.ToString(string)の場合はOPのコメント

あたり

編集、文字列を単純にしてもnull場合、返されます。 Reflectorの礼儀:

public static string ToString(string value) 
{ 
    return value; 
} 
+0

6行目でConvert.ToString(null)をnullとして評価し、String.Emptyではないと評価しました。 – bblack

+0

@fearpi - 良い点。私は投稿を更新しました。 –

1

Convert.ToString((DBNull)null)それがnullを渡された場合returns an empty stringConvert.ToString(object)オーバーロードを呼び出します。これは、最初の行と4行目が空の文字列になる理由です。

Convert.ToString(null)は、Convert.ToString(string)が最も派生した適用可能なバージョンであるため、オーバーロードを呼び出します。そのオーバーロードreturns the argument unchanged。これが、6行目がnullと評価される理由です。

関連する問題