0

我有一个具有 2 个属性的对象:

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

我希望发生的是,如果TypeIdequals 1,我想isApprovedequal false,否则我希望它true在创建新对象时相等。我尝试了以下方法,但它被设置true为我的两个对象,我在构造函数中执行规则:

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

我会将逻辑放在IsApprovedgetter 中,并将其设为只读值:

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

哦,C# 代码标准通常也指定属性应该是 CamelCased。

编辑:

我还希望以后可以选择手动更改 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 回答