简单C#:如何检查字符串输入是有效数字还是小于某个数字?

简单C#:如何检查字符串输入是有效数字还是小于某个数字?,c#,C#,我知道&&int.TryParse(birthMonth,out monthInt)==false)是我的问题所在,但我发布它是为了更好地解释我的问题 我希望验证用户输入(字符串)是否为数字且小于或等于12——这是一个有效的月份 // Get user's month of birth Console.Write("\nFascinating! What month? (1-12): "); birthMonth = Console.ReadLine();

我知道&&int.TryParse(birthMonth,out monthInt)==false)是我的问题所在,但我发布它是为了更好地解释我的问题

我希望验证用户输入(字符串)是否为数字且小于或等于12——这是一个有效的月份

 // Get user's month of birth
        Console.Write("\nFascinating! What month? (1-12): ");
        birthMonth = Console.ReadLine();

        // Check to see if user input for month is a number
        int monthInt;
        while (int.Parse(birthMonth) >= 13 && int.TryParse(birthMonth, out monthInt) == false)
        {
            Console.WriteLine("Invalid input. Please enter a number less than, or equal to 12!");
            birthMonth = Console.ReadLine();
        }

您需要首先使用
int.TryParse
进行解析,然后检查解析后的数字,如:

while (!int.TryParse(birthMonth, out monthInt) || monthInt >=13)
您还必须检查
monthInt
是否小于
1

有几件事需要注意:

  • 使用
    int.TryParse
    ,因为它在失败时不会引发异常
  • 使用
    |
    ,因为这将进行短路评估,并根据您的情况纠正操作员

首先需要使用
int.TryParse
解析,然后检查解析后的数字,如:

while (!int.TryParse(birthMonth, out monthInt) || monthInt >=13)
您还必须检查
monthInt
是否小于
1

有几件事需要注意:

  • 使用
    int.TryParse
    ,因为它在失败时不会引发异常
  • 使用
    |
    ,因为这将进行短路评估,并根据您的情况纠正操作员

您正在调用
Parse
TryParse
,在一次足够的情况下对值进行两次解析:

int parsedMonth;

if (int.TryParse(birthMonth, out parsedMonth))
{
    if (parsedMonth < 13)
    {
        // do whatever you need with the value
    }
    else
    {
        // out of range
    }
}
else
{
    // not a number
}
int-parsedMonth;
if(int.TryParse(生日月、外解析月))
{
如果(解析月<13)
{
//用这个值做你需要的任何事情
}
其他的
{
//超出范围
}
}
其他的
{
//不是数字
}
TryParse
解析值后返回
true
false
<代码>解析将在输入无效时引发异常


这不是最简洁的书写方式,但您可以更轻松地遵循逻辑。

您正在调用
Parse
TryParse
,在一次足够的情况下,对值进行两次解析:

int parsedMonth;

if (int.TryParse(birthMonth, out parsedMonth))
{
    if (parsedMonth < 13)
    {
        // do whatever you need with the value
    }
    else
    {
        // out of range
    }
}
else
{
    // not a number
}
int-parsedMonth;
if(int.TryParse(生日月、外解析月))
{
如果(解析月<13)
{
//用这个值做你需要的任何事情
}
其他的
{
//超出范围
}
}
其他的
{
//不是数字
}
TryParse
解析值后返回
true
false
<代码>解析将在输入无效时引发异常


这不是最简洁的书写方式,但您可以更轻松地遵循逻辑。

您需要使用
TryParse
尝试将字符串值解析为原语。所有原语--
bool
int
byte
DateTime
等都有此方法。创建一个函数来验证输入:

var birthMonth = Console.ReadLine();
int month;

if(!ValidateMonth(birthMonth, out month) {
    // process invalid month or whatever
}

bool ValidateBirthMonth(string birthMonth, out int month) {
    var month = default(int);

    if(!int.TryParse(birthMonth, out month)) {
        Console.WriteLine("invalid month");

        return;
    }

    if (month >= 1 && month <= 12) {
        Console.WriteLine("... great!!!");

        return;
    }

    Console.WriteLine("invalid entry: month must be 1-12");

}
var birthdmonth=Console.ReadLine();
整月;
如果(!ValidateMonth(生日月、外出月){
//处理无效的月份或其他什么
}
bool ValidateBirthMonth(字符串birthMonth,out int month){
var月=默认值(整数);
如果(!int.TryParse(生日月、外出月)){
Console.WriteLine(“无效月份”);
返回;
}

如果(月>=1&&month,您需要使用
TryParse
尝试将字符串值解析为原语。所有原语-
bool
int
byte
DateTime
等-都有此方法。生成一个函数以验证输入:

var birthMonth = Console.ReadLine();
int month;

if(!ValidateMonth(birthMonth, out month) {
    // process invalid month or whatever
}

bool ValidateBirthMonth(string birthMonth, out int month) {
    var month = default(int);

    if(!int.TryParse(birthMonth, out month)) {
        Console.WriteLine("invalid month");

        return;
    }

    if (month >= 1 && month <= 12) {
        Console.WriteLine("... great!!!");

        return;
    }

    Console.WriteLine("invalid entry: month must be 1-12");

}
var birthdmonth=Console.ReadLine();
整月;
如果(!ValidateMonth(生日月、外出月){
//处理无效的月份或其他什么
}
bool ValidateBirthMonth(字符串birthMonth,out int month){
var月=默认值(整数);
如果(!int.TryParse(生日月、外出月)){
Console.WriteLine(“无效月份”);
返回;
}

如果(月>=1&&month,您可以使用TryParse和和条件一起检查,如下所示

int outvar = -1;
            while (!int.TryParse(Console.ReadLine(),out outvar) && (outvar<=0 && outvar>12))
            {
                //your rest of the code
            }
intoutvar=-1;
而(!int.TryParse(Console.ReadLine(),out-outvar)和&(outvar12))
{
//剩下的代码
}

或者您可以使用TryParse和条件一起检查,如下所示

int outvar = -1;
            while (!int.TryParse(Console.ReadLine(),out outvar) && (outvar<=0 && outvar>12))
            {
                //your rest of the code
            }
intoutvar=-1;
而(!int.TryParse(Console.ReadLine(),out-outvar)和&(outvar12))
{
//剩下的代码
}
输入应

  • 表示
    int
    ,即
    int.TryParse
    应返回
    true
  • 至少为
    1
  • 最多为
    12
当这些条件中的任何一个失败(
-反转)时,循环:

while(!(int.TryParse(birthMonth,out monthInt)&&monthInt>=1&&monthInt输入应

  • 表示
    int
    ,即
    int.TryParse
    应返回
    true
  • 至少为
    1
  • 最多为
    12
当这些条件中的任何一个失败(
-反转)时,循环:


while(!(int.TryParse(birthMonth,out-monthInt)&&monthInt>=1&&monthInt你不需要像那样同时使用
int.Parse
int.TryParse
。在这个场景中只需使用
int.TryParse
。在这里阅读
out
的工作原理,你可以删除
int.Parse(birthMonth)
completely您不需要像那样同时使用
int.Parse
int.TryParse
。在这种情况下,只需使用
int.TryParse
。在这里阅读
out
的工作原理,您可以删除
int.Parse(生日月)
completelyal同样,如果你被这个神奇的数字冒犯了,你可以使用一个
TotalCalendarYearMonths
常量。或者获取实际的月数;)
CultureInfo.CurrentCulture.Calendar.GetMonthsInYear(DateTime.Today.Year)
您必须添加
monthInt@DmitryBychenko,我在代码下方添加了一个注释。我想知道他在代码中做错了什么,并理解他