比较int.TryParse结果的值

时间:2013-03-14 19:06:00

标签: c# visual-studio-2008 substring tryparse

我觉得有点愚蠢地问这个,因为要么我错过了一些容易的东西,要么根本不理解tryParse函数。

在外行人看来,我想在下面的代码中做的是让代码循环遍历datagridview中的所有列。如果列名的最后2个字符是数字,那么我想将最后2个字符(使用int.TryParse)的数值与另一个变量进行比较。基本上我想让我的所有列只读取那些最后2位数可以转换为整数并且该整数大于我正在比较的可变量的列的激励。

我的代码可能有点平凡,因为我试图在int_tryParse之前逐步设置变量,但我可以稍后解决。

C#,VS2008:

foreach (DataGridViewColumn col in grd1.Columns)
                {
                    string myCol = col.Name;
                    int myColLength = col.Name.Length;
                    string myColMonth = myCol.Substring(myColLength - 2);
                    if (int.TryParse(myColMonth, out myColMonth) <= myMostRecentActualMonth)
                    {
                        col.ReadOnly = true;
                    }
                    else
                    {
                        col.ReadOnly = false;
                    }
                }        

5 个答案:

答案 0 :(得分:2)

TryParse方法返回Boolean值,指示解析是否成功。如果是,则将输出参数设置为已解析的值。

所以你想要的是:

int parsedMonth; // This will get set if myColMonth is a valid integer
if (int.TryParse(myColMonth, out parsedMonth) && parsedMonth <= myMostRecentActualMonth)
{
   // ...
}

答案 1 :(得分:0)

int.TryParse的返回类型为bool:

尝试从这里开始:

       foreach (DataGridViewColumn col in grd1.Columns)
        {
            string myCol = col.Name;
            int myColLength = col.Name.Length;
            string myColMonth = myCol.Substring(myColLength - 2);
            int myIntColMonth;
            if (int.TryParse(myColMonth, out myIntColMonth) 
                && myIntColMonth <= myMostRecentActualMonth)
            {
                col.ReadOnly = true;
            }
            else
            {
                col.ReadOnly = false;
            }
        }   

答案 2 :(得分:0)

您可以像这样重写代码,首先需要另一个int值,您应该将解析后的值存储到该值,然后检查该值是否低于myMostRecentActualMonth

foreach (DataGridViewColumn col in grd1.Columns)
{
    string myCol = col.Name;
    int myColLength = col.Name.Length;
    string myColMonth = myCol.Substring(myColLength - 2);
    int myColMonthIntValue = int.MaxValue;
    if (int.TryParse(myColMonth, out myColMonthIntValue) && myColMonthIntValue <= myMostRecentActualMonth)
    {
        col.ReadOnly = true;
    }
    else
    {
        col.ReadOnly = false;
    }
}

答案 3 :(得分:0)

TryParse返回一个bool,指示转换是否成功。您不想比较TryParse(您正在做的事情)的结果,而是想要与您传入的变量进行比较。

因此;      if(int.TryParse(myColMonth,out myColMonth)&lt; = myMostRecentActualMonth)

需要成为;

 if (int.TryParse(myColMonth, out myColMonth)
    if ( myColMonth <= myMostRecentActualMonth)

首先检查你是否解析了一个int,然后进行比较。

答案 4 :(得分:0)

foreach (DataGridViewColumn col in grd1.Columns)
     {
         string myCol = col.Name;
         int myColLength = col.Name.Length;
         string myColMonth = myCol.Substring(myColLength - 2);
         int myColMonthInt = 0;
         if (int.TryParse(myColMonth, out myColMonthInt)) 
         {  
             if (myColMonthInt <= myMostRecentActualMonth)
             {
                 col.ReadOnly = true;
             }
             else
             {
                 col.ReadOnly = false;
             }
         } 
         else 
         {
             // what do you want to do is last two chars can't be converted to int?
             col.ReadOnly = true;
         }
     }