私は以下を比較しようとしています:
if (e.CreatedBy == null)
しかし、これは私に次のようなエラーを与えています:
タイプ「int」の値がタイプ「int?」の「null」と等しくなることはないため、式の結果は常に「false」になります。
CreatedBy の値がまだ設定されていないかどうかを確認する方法を教えてもらえますか? CreatedBy の定義は次のとおりです。
public int CreatedBy { get; set; }
私は以下を比較しようとしています:
if (e.CreatedBy == null)
しかし、これは私に次のようなエラーを与えています:
タイプ「int」の値がタイプ「int?」の「null」と等しくなることはないため、式の結果は常に「false」になります。
CreatedBy の値がまだ設定されていないかどうかを確認する方法を教えてもらえますか? CreatedBy の定義は次のとおりです。
public int CreatedBy { get; set; }
int
null にならないことを意味する値型です。そのデフォルト値は 0 です。0 ではなく null を格納する場合は、型を に変更する必要がありますint?
。これは null 許容の int 型です。Nullable 型の詳細については、「Nullable 型 (C#)」を参照してください。
の型はCreatedBy
、int
値をとれない型ですnull
。
現在持っているものからは、設定されているかどうかを検出することはできませんCreatedBy
。そのデフォルト値が であるとします0
。次に、値が に設定され1
、次に に戻り0
ます。では、どうすれば現在0
のものと元の変更されていないものを区別できるでしょ0
うか?
値が であるかどうかを検出したい場合は0
、その方法を説明する必要はないと思います。値が設定されているかどうかを本当に検出したい場合は、フラグを維持しbool
、プロパティのセッターが初めて実行されるときにそのフラグを設定する必要があります。
int 値は、 http://msdn.microsoft.com/en-us/library/1t3y8s4s( v=vs.80Nullable
).aspxを参照して
ください。
設定されているかどうかを確認したい場合
//GetValueOrDefault()
private int? createdBy;
public int CreatedBy
{
get { return createdBy.GetValueOrDefault(-1); }
set { createdBy= value; }
}
///your code
if(e.CreatedBy == -1)
{
//not set
}else
{
//set
}
int
null にできない値型です。値型をnull可能にしたい場合は、このようなオブジェクトint?
を作成する簡単な方法である whichを使用する必要がありますNullable
Nullable<int> myNullable = new Nullable<int>();
CreatedBy の値がまだ設定されていないかどうかを確認する方法を教えてもらえますか?
いいえ、値型 (int など) を null にすることはできないため、それは不可能です。
ただし、「int の Nullable」として宣言できるNullable 型を使用すると、null にすることができます。
私がリンクしたドキュメントから:
null 許容型は、基になる値の型に加えて、追加の null 値の正しい範囲の値を表すことができます
プロパティを「整数の Nullable」にするには、疑問符を追加するだけです。
public int? CreatedBy { get; set; }
上記の構文は、実際には次の省略形です。
public Nullable<int> CreatedBy { get; set; }
CreatedBy
次のように your の定義を変更できます。
public int? CreatedBy { get; set; }
そして彼らはあなたが次のチェックをすることができます
if (e.CreatedBy == null)
またif (e.CreatedBy.HasValue)
int のデフォルト値は null ではなく 0 であるためです。e.CreatedBy
それほど良い値になることは決してないnull
ので、0 と比較することをお勧めします。
if (e.CreatedBy == 0)
nullable
int は null と等しくなる可能性がありますが、null を許容することはできません (デフォルトの int) と等しくなることはありませんnull
。
さて、あなたはint not nullable intを使用しているので、null にすることはできませんか?
あなたの質問に答えるために、値が設定されているかどうかを確認することはできません。現在の値のみを確認できます。どのプロパティも、初期化時に「デフォルト」値を持ちます。ほとんどの型 (Nullable を含む) の既定値は null ですが、int の既定値は 0 です。
他の理由で誰もこのプロパティを 0 に設定しないと確信している場合は、次のことをテストできます。
if (e.CreatedBy == 0)
...ただし、別の状況で 0 がこのプロパティの有効な値である場合、0 をテストしても役に立ちません。同様に、プロパティを nullable に変更すると、次のことをテストできます。
if (e.CreatedBy == null)
...元の設計どおりですが、プロパティがnullに設定される可能性がある他の理由がある場合、それが設定されていたかどうかはわかりません。最後に設定されたときだけです。 null に設定します。
値が設定されているかどうかを本当に知りたい場合は、セッターが使用されたときに別のフラグを設定するなど、何か他のことが起こるように調整する必要があります。CreatedByHasBeenSet プロパティは、CreatedBy のセッターが呼び出されるまで false (デフォルト値は bool!) です。
private int createdBy;
public int CreatedBy
{
get
{
return this.createdBy;
}
set
{
this.createdBy = value;
this.CreatedByHasBeenSet = true;
}
}
public bool CreatedByHasBeenSet { get; private set; }