0

2 つのプロパティを持つオブジェクトがあります。

public class Request
{
    public int TypeId { get; set; }
    public bool isApproved { get; set; }
}

私がしたいのは、TypeIdequalsの場合はequalにし1たい、そうでない場合は、新しいオブジェクトを作成するときにそれを等しくしたいということです。次のことを試しましたが、コンストラクターでルールを実行する両方のオブジェクトに対して設定されました。isApprovedfalsetruetrue

public Request() {
    if(this.TypeId == 1) {
        this.isApproved = false;
    }
    this.isApproved = true;
}

var request = new Request() {
    TypeId = 1
}

var request2 = new Request() {
    TypeId = 2
}

これが発生した理由はわかっています。TypeIdコンストラクターが呼び出されたときに が設定されていないため、デフォルトでtrue. TypeId新しく作成されたオブジェクトに設定されたら、これを自動的に設定できる方法はありますか?

編集

isApprovedまた、後日手動で変更するオプションが欲しいので、に設定されている場合は、設定した自動ルールに影響を与えずにfalse変更できますtrue

4

5 に答える 5

4

ロジックをIsApprovedゲッターに入れ、読み取り専用の値にします。

public class Request
{
    public int TypeId { get; set; }
    public bool IsApproved 
    { 
        get
        {
            return this.TypeId != 1;
        }
}

また、通常、C# コード標準では、プロパティをキャメルケースにする必要があると指定されています。

編集:

isApproved を後日手動で変更するオプションも欲しいので、false に設定されていた場合は、設定した自動ルールが影響を与えることなく true に変更できます。

その場合、コンストラクターで設定する必要があります。(アレックスがすでに提案したように)

public class Request
{
    public int TypeId { get; set; }
    public bool IsApproved { get; set; }

    public Request(int typeId)
    {
        this.TypeId = typeId;
        this.IsApproved = typeId != 1;
    }
}
于 2012-08-09T12:03:07.280 に答える
2

変更してみる

public int TypeId { get; set; }

public int _typeId;

public int TypeId 
{
    get
    {
        return _typeId;
    }
    set
    {
        _typeId = value;
        isApproved = value != 1;
    }
}
于 2012-08-09T12:01:43.060 に答える
2

C# 4.0 では、メソッド パラメーターに既定値を割り当てることができ、これを行うことができます。

public Request(int TypeId = 1)
{
    approved = TypeId != 1;
}

利用方法:

var request = new Request(2); // approved = true
var request2 = new Request(1); //approved = false
于 2012-08-09T12:02:45.103 に答える
1
public class Request
{
    private int _typeId;
    public int TypeId { 
        get { return _typeId; }
        set {
            _typeId = value;
            isApproved = _typeId != 1;
        }
    }
    public bool isApproved { get; private set; }
}
于 2012-08-09T12:02:15.027 に答える
0
public class Request
{
    private int _typeId;
    public int TypeId 
    get
    {
        return _typeId;
    }
    set
    {
        isApproved = value != 1;
        _typeId = value;
    }

    public bool isApproved { get; set; }
}
于 2012-08-09T12:02:07.053 に答える