3

私は以下を比較しようとしています:

if (e.CreatedBy == null) 

しかし、これは私に次のようなエラーを与えています:

タイプ「int」の値がタイプ「int?」の「null」と等しくなることはないため、式の結果は常に「false」になります。

CreatedBy の値がまだ設定されていないかどうかを確認する方法を教えてもらえますか? CreatedBy の定義は次のとおりです。

public int CreatedBy { get; set; }
4

10 に答える 10

6

intnull にならないことを意味する値型です。そのデフォルト値は 0 です。0 ではなく null を格納する場合は、型を に変更する必要がありますint?。これは null 許容の int 型です。Nullable 型の詳細については、「Nullable 型 (C#)」を参照してください。

于 2013-07-09T13:57:46.597 に答える
6

の型はCreatedByint値をとれない型ですnull

現在持っているものからは、設定されているかどうかを検出することはできませんCreatedBy。そのデフォルト値が であるとします0。次に、値が に設定され1、次に に戻り0ます。では、どうすれば現在0のものと元の変更されていないものを区別できるでしょ0うか?

値が であるかどうかを検出したい場合は0、その方法を説明する必要はないと思います。値が設定されているかどうかを本当に検出したい場合は、フラグを維持しbool、プロパティのセッターが初めて実行されるときにそのフラグを設定する必要があります。

于 2013-07-09T13:56:27.810 に答える
3

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
}
于 2013-07-09T13:58:03.607 に答える
2

intnull にできない値型です。値型をnull可能にしたい場合は、このようなオブジェクトint?を作成する簡単な方法である whichを使用する必要がありますNullable

Nullable<int> myNullable = new Nullable<int>();
于 2013-07-09T13:56:42.290 に答える
2

CreatedBy の値がまだ設定されていないかどうかを確認する方法を教えてもらえますか?

いいえ、値型 (int など) を null にすることはできないため、それは不可能です。

ただし、「int の Nullable」として宣言できるNullable 型を使用すると、null にすることができます。

私がリンクしたドキュメントから:

null 許容型は、基になる値の型に加えて、追加の null 値の正しい範囲の値を表すことができます

プロパティを「整数の Nullable」にするには、疑問符を追加するだけです。

public int? CreatedBy { get; set; }

上記の構文は、実際には次の省略形です。

public Nullable<int> CreatedBy { get; set; }
于 2013-07-09T13:57:07.080 に答える
1

CreatedBy次のように your の定義を変更できます。

public int? CreatedBy { get; set; }

そして彼らはあなたが次のチェックをすることができます

if (e.CreatedBy == null)またif (e.CreatedBy.HasValue)

于 2013-07-09T14:01:59.773 に答える
1

int のデフォルト値は null ではなく 0 であるためです。e.CreatedByそれほど良い値になることは決してないnullので、0 と比較することをお勧めします。

if (e.CreatedBy == 0) 

nullableint は null と等しくなる可能性がありますが、null を許容することはできません (デフォルトの int) と等しくなることはありませんnull

于 2013-07-09T13:55:15.147 に答える
1

さて、あなたはint not nullable intを使用しているので、null にすることはできませんか?

于 2013-07-09T13:56:01.170 に答える
0

あなたの質問に答えるために、値が設定されているかどうかを確認することはできません。現在の値のみを確認できます。どのプロパティも、初期化時に「デフォルト」値を持ちます。ほとんどの型 (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; }
于 2013-07-09T13:59:46.760 に答える