0

Possible Duplicate:
C# ?: Conditional Operator


statement first:

if(dr["AskingPriceFrom"]!=System.DBNull.Value) 
    objFilters.AskingPriceFrom=Convert.ToDecimal(dr["AskingPriceFrom"]);
else 
    objFilters.AskingPriceFrom=null;

statement second:

objFilters.AskingPriceFrom=Convert.ToDecimal(
    dr["AskingPriceFrom"]!=System.DBNull.Value ? dr["AskingPriceFrom"] : null
    );

What is difference between these two statements?

In first statement, if value is empty in if-else condition, then it stores null value correctly; but, if value is empty in the second condition, then instead of storing null value it stores 0. AskingPriceFrom is a get-set field stores decimal value. I tried to convert only dr["AskingPriceFrom"] after the question mark but the statement gives me an error.

Is there any way to protect null value from converting in decimal?

4

5 に答える 5

2

どうやらConvert.ToDecimal(null) == 0

//編集:これはうまくいくはずです

objFilters.AskingPriceFrom =  
      (dr["AskingPriceFrom"] != System.DBNull.Value) ? 
       Convert.ToDecimal(dr["AskingPriceFrom"]) : null;
于 2013-02-05T07:56:34.123 に答える
1

これは、Decimal が null 許容ではないためです。decimal?null をその型に変換するときに、デフォルト値 0 を返さずに null を返すようにキャストする必要があります。

于 2013-02-05T07:56:07.937 に答える
0

https://stackoverflow.com/users/1336654/jeppe-stig-nielsenに感謝します。これは正常に動作しています。

objFilters.AskingPriceFrom = dr["AskingPriceFrom"] != System.DBNull.Value ? Convert.ToDecimal(dr["AskingPriceFrom"]) : (decimal?)null;
于 2013-02-05T09:03:02.440 に答える
0

Convert.ToDecimalここのドキュメントを読む必要がありますhttp://msdn.microsoft.com/en-us/library/e6440ed8.aspx

Convert.ToDecimal例外を返すdecimalかスローしますが、あなたの場合は戻り値の型が必要ですNullable<decimal>

次のようなコードを使用できます。

decimal? result;
if (Convert.IsDBNull(dr["AskingPriceFrom"]))
{
   result= null;
}
else
{
   result = dr.GetDecimal(reader.GetOrdinal("AskingPriceFrom"));
}
于 2013-02-05T08:19:26.287 に答える
0

インライン バージョン ( ternary ) でnullの場合、次のようになります。

objFilters.AskingPriceFrom =  Convert.ToDecimal(null);

これはおそらくエラーになります。

于 2013-02-05T07:59:01.720 に答える