27

値はクラス オブジェクトのデータベースから割り当てられるため、10 進数が NULL であるか、値があるかどうかを確認したいと思います。

public decimal myDecimal{ get; set; }

そして、私は持っています

myDecimal = Convert.ToDecimal(rdrSelect[23].ToString());

やっています:

if (rdrSelect[23] != DBNull.Value)
                    {
                        myDecimal = Convert.ToDecimal(rdrSelect[23].ToString());
                    }

しかし、私はこれを得ています:

'decimal' 型の値が null と等しくなることはないため、式の結果は常に 'true' です。

その10進数に何らかの値があるかどうかを確認するにはどうすればよいですか?

4

8 に答える 8

57

小数には常にデフォルト値があります。null許容型の10進数が必要な場合は、を使用できますdecimal?。その後、あなたはすることができますmyDecimal.HasValue

于 2013-01-29T19:54:42.127 に答える
6

decimalvalue type.NETにあります。また、値型を。にすることはできませんnull。しかし、あなたがあなたのために使うならば、nullable typeあなたはあなたがそうであるかdecimalどうかをチェックすることができます。好きdecimalnullmyDecimal?

Nullable型は、System.Nullable構造体のインスタンスです。null許容型は、基になる値型の通常の値の範囲に加えて、追加のnull値を表すことができます。

if (myDecimal.HasValue)

しかし、あなたのデータベースでは、この列にnull許容値が含まれている場合は、タイプを。にするべきではないdecimalと思います。

于 2013-01-29T19:56:03.497 に答える
1

データ行から読み取っていると仮定すると、必要なものは次のとおりです。

if ( !rdrSelect.IsNull(23) ) 
{ 
   //handle parsing
}
于 2013-01-30T14:14:03.690 に答える
0

この値をSQLデータベースから直接取得していて、その値がnullの場合、実際にはDBNullnullではなくオブジェクトになります。変換の前にチェックを入れて、の場合はデフォルト値を使用するDBNullか、後でnullチェックをのチェックに置き換えrdrSelect[23]ますDBNull

于 2013-01-29T19:56:42.323 に答える
0

このような場合にDBからの値を処理するための便利なユーティリティ関数を作成することもできます。元。以下は、オブジェクト型からNullableDecimalを提供する関数です。

    public static decimal? ToNullableDecimal(object val)
    {
        if (val is DBNull ||
            val == null)
        {
            return null;
        }
        if (val is string &&
            ((string)val).Length == 0)
        {
            return null;
        }
        return Convert.ToDecimal(val);
    } 
于 2013-01-29T20:01:46.647 に答える