0

我有这段代码可以检查用户是否在文本框中输入了任何内容,但我不知道检查其他文本框是 int 和小数的等价物。

public bool IsValid
        {
            get
            {
                return (!String.IsNullOrWhiteSpace(StreetName) && !String.IsNullOrWhiteSpace(City) && HouseNumber != null  );
            }
        }

当然 Housenumber != null 部分有一个波浪形的下划线。HouseNumber 是小数,我也需要检查一些整数,那么我可以用什么替换 HouseNumber != null ?

如果我能做到这一点,那就太棒了

             public bool IsValid
            {
                get
                {
                    return (!String.IsNullOrWhiteSpace(StreetName) && !String.IsNullOrWhiteSpace(City) && !Decimal.IsNullOrWhiteSpace(HouseNumber)  );
                }
            }
4

3 回答 3

1

这里有几个方法:

    public bool isDecimal(string s)
    {
        Decimal d;
        return Decimal.TryParse(s, out d);
    }
    public bool isInt(string s)
    {
        int i;
        return Int32.TryParse(s, out i);
    }

编辑:

    public bool isNullWhiteSpaceAndNotDecimal(string s)
    {
        if (String.IsNullOrWhiteSpace(s))
        {
            return true;
        }
        Decimal d;
        return !Decimal.TryParse(s, out d);
    }
    public bool isNullWhiteSpaceAndNotInt(string s)
    {
        if (String.IsNullOrWhiteSpace(s))
        {
            return true;
        }
        int i;
        return !Int32.TryParse(s, out i);
    }

这更像是你想要的!Decimal.IsNullOrWhiteSpace(HouseNumber);

于 2013-03-31T02:38:48.110 回答
1

HouseNumber永远不可能null,因为它是一个值类型。 default(decimal)0。所以,如果0总是一个无效的数字,那么检查一下。如果它是有效数字,您可以将其初始化为无效数字,即

class Whatever
{
    private const decimal InvalidHouseNum = decimal.MinValue;

    public Whatever(...)
    {
        // ...
        HouseNumber = InvalidHouseNum;
    }
    public bool IsValid
    {
        get
        {
            return (!String.IsNullOrWhiteSpace(StreetName) && !String.IsNullOrWhiteSpace(City) && HouseNumber != InvalidHouseNum  );
        }
    }

}

如果任何数字有效,请使用可为空的小数,即

private decimal? HouseNumber { get; set; }

现在它将默认为空。


作为旁白; decimal门牌号真的是最佳选择吗?门牌号可以有小数部分吗?


编辑:只需阅读您的评论。如果HouseNumber实际上是一个字符串(不是decimal你在问题中所说的),那么使用TryParse. 当然,您可能应该首先使用不允许无效值的控件。

于 2013-03-31T02:32:04.433 回答
0

实际上,由于某种原因,我的文本框填充了 0,所以这最终对我有用,而其他答案不起作用。

public bool IsValid
        {
            get
            {
                return (!String.IsNullOrWhiteSpace(StreetName) && !String.IsNullOrWhiteSpace(City) && HouseNumber != 0 && ZipCode != 0 && Price != 0);
            }
        }

我还是 C# 的新手,所以我没有想到如果任何十进制或 int 文本框为空,我也可能只添加一个 .ToString() ,如下所示。它摆脱了红色波浪下划线,但由于文本框有 0,我使用了上述版本并且它有效。下面的答案是我当时正在寻找的答案。

public bool IsValid
        {
            get
            {
                return (!String.IsNullOrWhiteSpace(StreetName) && !String.IsNullOrWhiteSpace(City) && !String.IsNullOrWhiteSpace(HouseNumber.ToString) && !String.IsNullOrWhiteSpace(ZipCode.ToString) && !String.IsNullOrWhiteSpace(Price.ToString) );
            }
        }
于 2013-03-31T20:27:10.593 回答