C#属性设置如果

时间:2017-11-24 18:43:00

标签: c# properties setter

我可以在没有字段的c#类中创建一个属性,但我仍然可以检查该值并仅在匹配时设置它吗?

我的意思是这样的:

public int Num
{
    get;
    set if value > 0 && value < 100;
}

我知道我可以这样做:

private int num;
public int Num
{
    get
    {
        return num;
    }
    set
    {
        if (value > 0 && value < 100)
            num = value;
    }
}

但我想在不使用字段的情况下进行,只使用属性。 有可能吗?

2 个答案:

答案 0 :(得分:2)

要明确: btw;并不是说房产不会被设置为该值, 它只是一种不同的方式来查看您的问题。

您可以使用属性,但您需要一种方法来验证它们。例如; Range属性:

[Range(0,100, ErrorMessage = "Value for {0} must be between {1} and {2}.")]
public int Num {get; set;}

因此,这通常用于MVC或EF类应用程序,其中属性由特定框架检查。

此处有关于该主题的更多信息:https://msdn.microsoft.com/en-us/library/cc668215(v=vs.110).aspx

它也适用于MVVM WPF应用程序,但同样,您需要一个框架。

顺便说一句;并不是说房产不会被设定为这个价值,只是看待你问题的另一种方式。

因此,如果您的用例实际上是如何限制并轻松地在视图或数据模型上应用某些业务规则,那么这是一种可接受的方法。如果您将其保留为原始问题can I do a conditional set without an if and a field?,则答案是否定的。

可以找到更多属性here

答案 1 :(得分:1)

我认为答案是肯定的。您可能希望看到此one和此one以了解原因。

  

字段是普通成员变量或类的成员实例。属性是获取和设置其值的抽象。

通过第一个块,你只需要打破已在C#中定义的速记,如果你想实现这个想法,我认为@Stefan提出了一个好的想法。