何が良いですか
var s = (string)reader[0]
また
var s = Convert.ToString(reader[0])
?
何が良いですか
var s = (string)reader[0]
また
var s = Convert.ToString(reader[0])
?
私は言うだろうreader.GetString(0)
なぜ誰も可読性と保守性を考慮しなかったのですか?
私は、著者が次のことについて質問していることを知っています。
var s = (string)reader[0]
or
var s = Convert.ToString(reader[0])
しかし、どうですか:
string s = reader["Fieldname"].ToString();
列を交換/削除/追加し、インデックスが変更されている場合、これはより読みやすく、より安全です...これは確かに価値があります。
ある人は、ハード キャストが 30% 速いと言いました。1 ミリ秒の 30% は 1,333 ミリ秒ですか? データ取得全体の 30% ではないことは確かです。
// 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])
したがって、文脈を考慮して選択することはおそらく問題です。
reader[0] が実際に文字列の場合、(string)reader[0]
.
それはより明確で、おそらくより高速です(コンパイラーが私が知らない魔法のような最適化を行わない限り)。
var s = (string)reader[0]
文字列としてキャストできない場合、クラスキャスト例外が発生しますが、
var s = Convert.ToString(reader[0])
より適切に処理され、変換できない場合は null になります。これは、reader[0] のより多くのタイプのオブジェクトも処理します。他のメソッドでは、型を文字列にキャストできるキャストのみが許可されますが、これは Convert クラスが処理できるすべての型をサポートします。私はそれ以上だと思います。でもそうじゃないかも…
これはより高速で、私のテストでは約30% 高速です。
var s = (string)reader[0];
ただし、これは null の場合は爆発しません。
var s = Convert.ToString(reader[0]);
どうreader.GetString(0);
ですか?
私は推測するだろうreader[0].ToString();
どうですか
リーダー[0].ToString();
私は一緒に行きます
reader[0].ToString();