如果用户设置的值不符合条件(没有私有变量),我想为数据属性设置默认值(getter值)。
这是代码
public class TreeViewModel
{
public a()
{
this.Height = 200;
}
public int Height { get; set ; }
}
如果用户将height的值设置为小于200,我希望设置默认值(200)。我尝试了以下代码,但没有成功,因为我需要为get定义一个主体(在c#MVC中编码)
public int Height { get; set {
if (value < 200)
value = 200;
} }
答案 0 :(得分:2)
不应该是:
public class TreeViewModel
{
private const int minHeight = 200;
private int _Height = minHeight;
public int Height
{
get { return _Height; }
set { this._Height = value < minHeight ? minHeight : value; }
}
}
您也可以考虑在外部定义minHeight值,例如:在配置文件中。
哦,是的,我使用了一个私有变量 - 该属性没有内部方式来存储值,所以唯一的另一种选择是使用另一个持久性介质,例如Session,ViewState,DataBase等。
答案 1 :(得分:2)
自动属性将为您创建一个支持字段:
public int Height { get; set; }
变成了:
public int Height
{
[CompilerGenerated]
get
{
return this.k__BackingField;
}
[CompilerGenerated]
set
{
this.k__BackingField = value;
}
}
所以你可以创建自己的支持领域:
public class TreeViewModel {
private const int heightDefault = 200;
private int height = heightDefault;
public int Height {
get {
return this.height;
}
set {
this.height = (value < heightDefault ) ? heightDefault : value;
}
}
}
答案 2 :(得分:1)
只有在不需要其他逻辑时才应使用自动属性。您必须添加一个支持字段。我想,如果你足够努力搜索,你会发现一些没有背景的扭曲方式,但为了清晰起见,我会保持简单并使用旧式。
答案 3 :(得分:1)
当您使用自动属性时,您无法访问内部变量本身,因此您无法在其中放置任何逻辑。
正如詹姆斯所指出的那样,你必须手动编写私有变量并手动编写访问者。