2012-03-09 1 views

答えて

8

方法について:不要な連結、不要な仮想呼び出しを回避し、null参照のメソッドを呼び出すことのリスクを回避

var item = (string)dr["someString"] ?? ""; 

。この文脈ではdrが何であるかは明らかではない。それは、データ・リーダー(IDataReaderなど)である場合は、必要がある場合があります。

int index = dr.GetOrdinal("someString"); 
var item = dr.IsDBNull(index) ? "" : dr.GetString(index); 

またはDataRow.IsNullを含むDataTable、何かの場合を。

+0

この例では、そのDataRow –

+0

@もちろんですが、最初は 'DBNull'のファンではありませんが、' DataRow'のコンテキストでは 'dr.IsNull(... ) '。それは答えを変更しませんが、[いくつかの関連するノート](http://stackoverflow.com/questions/4958379/what-is-the-difference-between-null-and-system-dbnull-value/9632050#9632050あなたが興味をそそるかもしれない)。 –

+0

@Leighを脇に置いて、質問に関連するすべてのコンテキストを含めることの重要性も示しています。この場合、**本当に重要です** '博士(dr) 'と定義されているので、質問でそれをボランティアすることは有益でしょう; p –

2

dr["someString"].ValueOrEmpty()でどうなりますか?

元の質問については、パフォーマンスは重要ではありません。私は、より良いパフォーマンスを得るために最適化できる他のいくつかの領域があることを約束します。

最も読みやすいコードを作成します。また、必要なことが証明されるまで最適化しないでください。

更新:

public static class StringExtensions 
{ 
    public static string ValueOrEmpty(this object obj) 
    { 
     return obj == null ? "" : obj.ToString(); 
    } 
} 
+1

問題がある場合は... –

+0

はい、それとも最善の方法ですか? –

+0

@マーク、 'dr'がDataRowの場合、dr [" someThing "]はnullではなくDBNullを返しますか? – zmbq

関連する問題