3
Convert.ToInt32(myCommand.ExecuteScalar()); // Returns 100, because myCommand is a SQL command that gets a non-null BigInt cell
myCommand.ExecuteScalar() as int? ?? 0; //Returns 0 even when myCommand is SQL command that gets a non-null BigInt cell

myCommand.ExecuteScalar() は を返すことができるため、この場合は 2 番目の方法を使用する必要がありますDBNull。しかし、なぜ 2 番目の方法は とは異なる結果を返すのConvert.ToInt32でしょうか?

編集: ありがとうございます。タイプを Int64 に変更し、現在は機能しています。

4

2 に答える 2

9

変換とキャスト (キャスト演算子、is演算子、およびas演算子を使用) は 2 つの異なるものです。

  • Convert は、ある型を別の型に変更することです。からstringまたはInt64へのようにInt32
  • キャストは、基本型から継承型へのみ行うことができます。この場合 からobjectまでInt32。成功するには、objectMUST が含まれている必要があります。Int32あなたの場合、そうではなく、キャストが返されnullます。

コード内:

Int64 l = 100;
object o = l;
Int32 i1 = o as Int32? ?? 0; // Cast fails, so "as" will return 0. "??" will make it 0.
Int32 i2 = Convert.ToInt32(o); // The Int32 inside the object will be converted into an Int32 and will return 100.
于 2013-05-18T20:03:23.563 に答える