1

構造体に DateTime プロパティ フィールドがあります。入力された値が未来でないことを確認するために、inputdate を検証しようとしています。

私は次のコードを使用しています:

public struct Car
{
    public DateTime Year
    {
        get
        {
            return Year;
        }

        set
        {
            if (value > DateTime.Now)
                throw new InvalidOperationException("Date cannot be in the futrure");
            else
                Year = value;
        }
    }
}

このコードを実行しようとすると、「現在のスレッドがスタック オーバーフロー状態にあるため、式を評価できません」というメッセージとともに StackOverflowException が発生し続けます。

これがなぜなのか、またはこれを修正する方法についてのアイデアはありますか?

-ありがとう。

4

2 に答える 2

4

スタックがオーバーフローするまで、アクセサが呼び出すプロパティYeargetアクセサが呼び出すプロパティなどを呼び出します。YeargetYear

private DateTime _year実際の値を格納するには、プライベートフィールドを作成する必要があります。

于 2012-04-22T04:37:43.603 に答える
4

それは自分自身を返しています...変数を設定してみてください。

public struct Car 
{ 
    private DateTime _year;
    public DateTime Year 
    { 
        get 
        { 
            return _year; 
        } 

        set 
        { 
            if (value > DateTime.Now) 
                throw new InvalidOperationException("Date cannot be in the futrure"); 
            else 
                _year = value; 
        } 
    } 
} 
于 2012-04-22T04:37:01.640 に答える