11
public decimal v1 {
  get {
    return this._v1; 
  }
  set {
    this._v1 = value ?? 0M;  // also I tried, default(decimal)
  }
}

エラーメッセージは言う:

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

なぜそれが機能しないのですか、そしてどうすればそれを機能させることができますか?

4

6 に答える 6

17

タイプをnullにすることはdecimalできないため、ここではnull合体演算子は意味がありません。に設定_v1するだけvalueです。

于 2012-09-18T15:02:42.390 に答える
5

これらは値型であり、null使用することはできませんNullable<decimal>

private decimal? _v1;
public decimal? V1
{
    get
    {
        return this._v1;
    }
    set
    {
        this._v1 = value ?? 0M;
    }

}
于 2012-09-18T15:02:54.137 に答える
3

小数ですか?または小数

?? 小数で動作しますか?ただし、小数がnullになることはないため、小数ではありません。

http://msdn.microsoft.com/en-us/library/ms173224.aspx

于 2012-09-18T15:03:01.970 に答える
1

それがヌル合体演算子です。10進数はnullにできないため、10進数では使用できません。

decimal?この機能が必要な場合は、nullに設定できるを使用できます。

public decimal? v1 
{
    get 
    {
        return this._v1; 
    }
    set 
    {
        this._v1 = value ?? 0M;
    }
}
于 2012-09-18T15:03:11.767 に答える
0

デフォルトの10進値0がnull、空、または設定されていないと見なされ、ゼロでない場合にのみ使用valueする場合は、次のように実行できます。

decimal nextBest = 10M;

public decimal v1 {
  get {
    return this._v1; 
  }
  set {
    // Use value by default (only if it's not 0), Otherwise use a different number.
    this._v1 = (value != 0)? value : nextBest;  
  }
}
于 2020-01-06T22:02:16.353 に答える
0

クラスIeのプロパティに対してこれを実行しようとしている場合:

public class TestCase {
     public decimal TestProp {get;set;}
}

次のようにnull合体を行うことができます。

var testCase = new TestCase();
return testCase?.TestProp ?? 0M
于 2021-11-22T14:46:49.873 に答える