7

何が良いですか

var s =  (string)reader[0]  

また

var s = Convert.ToString(reader[0])

?

4

10 に答える 10

7

私は言うだろうreader.GetString(0)

于 2010-02-15T14:13:00.573 に答える
4

なぜ誰も可読性と保守性を考慮しなかったのですか?

私は、著者が次のことについて質問していることを知っています。

var s =  (string)reader[0]      
or    
var s = Convert.ToString(reader[0])

しかし、どうですか:

string s = reader["Fieldname"].ToString(); 

列を交換/削除/追加し、インデックスが変更されている場合、これはより読みやすく、より安全です...これは確かに価値があります。

ある人は、ハード キャストが 30% 速いと言いました。1 ミリ秒の 30% は 1,333 ミリ秒ですか? データ取得全体の 30% ではないことは確かです。

于 2010-10-27T18:48:28.010 に答える
4
// Conveys that you are sure that reader[0] is a string and 
// if it's not you probably have bigger problems 
// than the resulting exception
var s =  (string)reader[0];

// Conveys that you are hoping that reader[0] is convertible to a string
var s = Convert.ToString(reader[0])

したがって、文脈を考慮して選択することはおそらく問題です。

于 2010-02-15T14:20:22.810 に答える
2

reader[0] が実際に文字列の場合、(string)reader[0].

それはより明確で、おそらくより高速です(コンパイラーが私が知らない魔法のような最適化を行わない限り)。

于 2010-02-15T14:10:24.077 に答える
2
var s =  (string)reader[0]  

文字列としてキャストできない場合、クラスキャスト例外が発生しますが、

var s = Convert.ToString(reader[0])

より適切に処理され、変換できない場合は null になります。これは、reader[0] のより多くのタイプのオブジェクトも処理します。他のメソッドでは、型を文字列にキャストできるキャストのみが許可されますが、これは Convert クラスが処理できるすべての型をサポートします。私はそれ以上だと思います。でもそうじゃないかも…

于 2010-02-15T14:12:32.520 に答える
2

これはより高速で、私のテストでは約30% 高速です。

var s =  (string)reader[0];

ただし、これは null の場合は爆発しません。

var s = Convert.ToString(reader[0]);
于 2010-02-15T14:14:02.907 に答える
2

どうreader.GetString(0);ですか?

于 2010-02-15T14:15:06.077 に答える
1

私は推測するだろうreader[0].ToString();

于 2010-02-15T14:10:09.450 に答える
1

どうですか

リーダー[0].ToString();

于 2010-02-15T14:12:13.810 に答える
0

私は一緒に行きます

reader[0].ToString();
于 2010-02-15T14:22:40.463 に答える