3

null 合体演算子の適用中に次のエラーに直面しています。

private decimal _currentImpulseId;
// ... later on used in public property getter as follows

public decimal CurrentImpulseId
{
  get { return _currentImpulseId ?? 0M; }
  set { _currentImpulseId = value; }
}

次のエラーが返されます。

演算子「??」タイプ 'decimal' および 'decimal' のオペランドには適用できません

なぜこれが機能しないのですか?null合体演算子は小数では機能しませんか、それともここに何かが欠けていますか? 演算子を使用せずにこれを回避する方法は知っていますが、これにはやや困惑したので、これに関する正しい答えを知っているのだろうか?

ありがとう!

4

2 に答える 2

6

decimalは値型であり、null 許容値型 (例: decimal?) または参照型ではないため、このエラーが発生しています。

MSDNから:

...そして、null 許容値型または参照型のデフォルト値を定義するために使用されます

タイプの変数のデフォルト値decimalはゼロであるため、このシナリオでこの演算子を使用する理由がよくわかりません。

また、バッキング フィールド変数 ( _currentImpulseId) は .NET 3.0 の時点では必要ありません。自動実装プロパティの導入により

public decimal CurrentImpulseId { get; set; }
于 2012-08-22T11:56:00.073 に答える
3

decimal は値型であるため、ここを参照してください。null可能にする必要があります。試す

private decimal? _currentImpulseId;
// ... later on used in public property getter as follows

public decimal? CurrentImpulseId
{
  get { return _currentImpulseId ?? 0M; }
  set { _currentImpulseId = value; }
}
于 2012-08-22T11:59:54.900 に答える