我有一个具有2个属性的对象:
public class Request
{
public int TypeId { get; set; }
public bool isApproved { get; set; }
}
我希望发生的是,如果TypeId
等于1
,我希望isApproved
等于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
我设置影响它
答案 0 :(得分:4)
我会将逻辑放在IsApproved
getter中,并将其设为只读值:
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;
}
}
答案 1 :(得分:2)
尝试更改
public int TypeId { get; set; }
到
public int _typeId;
public int TypeId
{
get
{
return _typeId;
}
set
{
_typeId = value;
isApproved = value != 1;
}
}
答案 2 :(得分: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
答案 3 :(得分: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; }
}
答案 4 :(得分:0)
public class Request
{
private int _typeId;
public int TypeId
get
{
return _typeId;
}
set
{
isApproved = value != 1;
_typeId = value;
}
public bool isApproved { get; set; }
}