2013-05-18 4 views
5

MSDN docs for String.Joinによると "値の要素がnullの場合、代わりに空の文字列が使用されます。"単にそれはで「ヌル」を入れて持っているどのような方法があります.Net C#String.Join要素の値がnullの場合、空の文字列の代わりに "null"を出力する方法は?

8, 7, , 12, , , 13, 

私が持っているコードは、これは、このような出力につながるのDataTable

rotationValues = string.Join<object>(", ", 
    from r in rotationData.Rows.OfType<DataRow>() select r[5]); 

からデータを引っ張りますそのような空の文字列の代わり:

8, 7, null, 12, null, null, 13, null 
+0

@NetStarterの条件は、データテーブルから多くの異なる文字列が引き出されている場合に問題があります。回転可能な値だけだった場合は、おそらくOKですが、rotationStdDev、rotationMin、rotationMax、 yadda yadda yadda、およそ20個の値があり、条件付きであればオーバーヘッドが大きくなります。しかし、提案をありがとう。 –

答えて

7

あなたは

を選択することができます
r[5] ?? "null" 

r[5]ではなく、

また、汎用メソッドを呼び出すときに<object>の部分を削除するだけです。結合するのは依然としてIEnumerable<object>ですが、コンパイラは型パラメータを自動的に推論します。コメントの後

ADDITION:

あなたr[5]DBNull.Valueかもしれません。次に、これは「実際の」null参照ではありませんが、ToStringの実装は""を返します。その場合、string.Joinのドキュメントは厳密には関連していませんでした。したがって、

(r[5] == null || DBNull.Value.Equals(r[5])) ? "null" : r[5] 

または多分

(r[5] == null || r[5] is DBNull) ? "null" : r[5] 

のようなものを選択しようと、それがお役に立てば幸いです。

+0

私が必要としていたこと、ありがとうございました。私はGoogleで見つけられなかったことを学びました。非常にすばらしい! –

+0

私はあまりにも早く話しましたが、答えは良く見えましたが、一度実装されるとNULL値を実際には置き換えませんでした。ここでは、rotationDataがDataSetについてどのようになるかを示します。myDataSet = new DataSet(); mySqlDataAdapter.Fill(myDataSet); DataTableのrotationData = myDataSet.Tables ["テーブル"]; –

+0

ありがとうございましたJeppe、私はまた、nullがDBNullと等しくないことを指摘する人々を招いたフォローアップの質問を投稿しました。http://stackoverflow.com/questions/16621962/net-c-sharp-operator-didnt-trigger -for-system-dbnull-type-in​​-datatable-data –

0

私は彼の方法が実際に私のために働いていない理由を確信していません。r[5]のヌル値は実際にはタイプSystem.DBNullであることが確認されましたが、 。

私がやりたくなかったことを条件としている
rotationValues = string.Join(", ", 
    from r in rotationData.Rows.OfType<DataRow>() 
    select (r[5].ToString().Length == 0 ? "null" : r[5])); 

が、私は男がチェックするさまざまな方法をベンチマークし、このページC# Empty Stringsを見ていた。ここで

は、私が代わりにやってしまったものです文字列が空で、長さメソッドが最も速かったかどうか。だから私は長さをチェックし、長さが0の場合は "null"になり、ゼロでない場合は実際の r[5]の値になります。

これはまだ分かりません。 "null"はうまくいかなかった。

編集用参照: 問題は本当ですか?? nullで動作し、DBNullでは動作しません。関連項目.Net C# ?? operator didn't trigger for System.DBNull type in DataTable DataRow

+1

答えを更新しました。 –

関連する問題