如果data属性的设置值不满足条件,则重定向到getter

时间:2009-09-23 09:42:52

标签: c# asp.net-mvc

如果用户设置的值不符合条件(没有私有变量),我想为数据属性设置默认值(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;
    } }

4 个答案:

答案 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)

当您使用自动属性时,您无法访问内部变量本身,因此您无法在其中放置任何逻辑。

正如詹姆斯所指出的那样,你必须手动编写私有变量并手动编写访问者。