检查null或空字符串

时间:2017-04-28 10:08:55

标签: c# asp.net-mvc

我想显示'原因没有说明'如果用户没有填写此字段,或填写用户输入。 使用此代码,我不明白为什么,但即使我填写该字段,它也会显示“没有说明的理由”。

    private string reason;
    public string Reason
    {
        get
        {
            return this.reason;
        }
        set
        {
            if (string.IsNullOrEmpty(this.Reason))
                this.reason = "reason not explicited";
            else this.reason = value;
        }
    }

    [Pure]
    public static bool IsNullOrEmpty(String value) {
        return (value == null || value.Length == 0);
    }

7 个答案:

答案 0 :(得分:8)

只需在你的setter中使用value来处理正确的行为

set
{
    if (string.IsNullOrEmpty(value))
        this.reason = "reason not explicited";
    else 
        this.reason = value;
}

答案 1 :(得分:4)

因为您正在检查属性而不是值 您当前的代码仅在属性为null或为空时才设置该属性的值 它应该是

    set
    {
        if (string.IsNullOrEmpty(value))
            this.reason = "reason not explicited";
        else this.reason = value;
    }

甚至更好:

    set
    {
        this.reason = (string.IsNullOrEmpty(value)) ? "reason not explicited": value;
    }

答案 2 :(得分:3)

您必须检查value,而不是this.Reason

public string Reason
    {
        get
        {
            return this.reason;
        }
        set
        {
            this.reason = string.IsNullOrEmpty(value)
              ? "reason not explicited"
              : value; 
        }
    }

答案 3 :(得分:1)

问题在于这行代码

if (string.IsNullOrEmpty(this.Reason))

当您尝试获取此属性的值时,请调用它的getter,它将返回reason字段的值。当你试图获得它的价值时,这个字段没有填充正确的值。

所以你应该修改你的代码来检查是否为空或具有空字符串的具体输入值:

if (string.IsNullOrEmpty(value))

答案 4 :(得分:1)

您可以对 IsNullOrEmpty() 执行扩展方法:

public static bool IsNullOrEmpty(this string value) => string.IsNullOrEmpty(str);

然后你可以这样使用它:

set { this.reason = value.IsNullOrEmpty() ? "reason not explicited" : value; }

答案 5 :(得分:0)

你需要将传递给函数IsNullOrEmpty函数

if (string.IsNullOrEmpty(value))
                this.reason = "reason not explicited";
            else this.reason = value;

答案 6 :(得分:0)

当您更改(分配)值时,将触发设置器,因此如果用户跳过该字段,则意味着设置器不会触发。但是当您访问属性的值时,将触发getter。因此,在您的情况下,如果您在get方法中应用逻辑,如果原因为null或为空,它将显示"reason not explicited"。所以新逻辑将如下所示:

 get
 {
     if (string.IsNullOrEmpty(this.reason))
         return "reason not explicited";
     else this.reason = value;
         return this.reason;
 }
 set
 {
     this.reason = value;  
 }

另一个解决方案是这样的:

使用"reason not explicited"初始化备份属性,因此即使用户跳过该字段(setter也不会触发),您将获得要打印的默认值。您必须根据value

更新备份属性
private string reason = "reason not explicited";

public string Reason
{
    get { return this.reason; }
    set
    {
        if (String.IsNullOrEmpty(value))
            this.reason = "reason not explicited";
        else
            this.reason = value;
    }
}