如何检查整数和小数是否有效?

时间:2013-03-31 02:27:06

标签: c#

我有这个代码检查用户是否在文本框中输入了任何内容,但我不知道equivelant是否检查其他文本框是int和decimal。

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

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

如果我能做到这一点真是太棒了

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

3 个答案:

答案 0 :(得分: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; }

现在它默认为null。


撇开;是decimal真的是门牌号码的最佳选择吗?门牌号码可以有一小部分吗?


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

答案 1 :(得分: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);

答案 2 :(得分:0)

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

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

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

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