0

List<>Oracle で動作する Visual Studio 2010 C# プロジェクトを変更する必要があります。いくつかのコードを見て、データベース ストアド プロシージャ (カーソル) から値をロードしてを返す関数を見つけました。

while (myIDataReader.Read())
{
    // OK
    myTable.myStringField = myIDataReader["TableStringField"].ToString();
    // ¿?
    myTable.myIntField =
    Convert.ToInt32((myIDataReader["TableIntField"] == DBNull.Value) ? null : myIDataReader["myTableField"]);
}

すべて問題ありません。知りたいのは、 assignmyTable.myIntFieldのときにどのような条件が与えられるかです。この列が null 可能であることはわかっていますが、構文がわかりません。誰かが説明できる場合は感謝します

4

2 に答える 2

1

あなたはこの行について話しているのですか?

myTable.myIntField =
Convert.ToInt32((myIDataReader["TableIntField"] == DBNull.Value) ? null : myIDataReader["myTableField"]);

そのステートメントをバラバラに分割すると、ここで説明されている、多くの場合三項演算子と呼ばれる一種の条件があります。

conditional ? if_true_do_this : if_false_do_this

実際には、次の構文が異なるだけです。

if(conditional) {
    if_true_do_this;
} else {
    if_false_do_this
}

その後、単純に結果をConvert.ToInt32()に渡して、 a から にstring変換しintます。

したがって、そのコード行は、これのより簡潔なバージョンです。

if(myIDataReader["TableIntField"] == DBNull.Value)
{
    myTable.myIntField = Convert.ToInt32(null);
}
else
{
    myTable.myIntField = Convert.ToInt32(myIDataReader["myTableField"]);
}
于 2012-12-07T13:12:09.277 に答える
0

上記の構文は正しく機能し、次のことを意味します。

TableIntFieldデータベースのヌルが含まれている可能性があります。これは、 DBNullオブジェクトとその Value フィールド
を介して NET で表現されます。

このコードは、 C#三項演算子TableIntField経由が含まれているかどうかをチェックします。 チェックの結果が true の場合、Convert.ToInt32 の引数として null が使用され、MSDN のドキュメントによると、myTable.myIntField にゼロ値が割り当てられます。DBNull.Value

于 2012-12-07T13:10:56.760 に答える