比较int的值.TryParse结果

本文关键字:结果 TryParse 的值 int 比较 | 更新日期: 2023-09-27 18:04:09

我觉得问这个问题有点傻,因为我要么错过了一些非常简单的东西,要么根本不理解tryParse函数。

通俗地说,我想在下面的代码中做的是让代码循环遍历datagridview中的所有列。如果列名的最后两个字符是数字,那么我想将最后两个字符的数字值(使用int.TryParse)与另一个变量进行比较。实际上,我想让所有的列都是只读的,除了那些最后两位数字可以转换为整数并且该整数大于我正在比较的变量的列。

我下面的代码可能有点平凡,因为我试图在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;
                    }
                }        

比较int的值.TryParse结果

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

所以你想要的是这样的:

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

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;
            }
        }   

TryParse返回一个bool值,表示转换是否成功。你不想比较TryParse的结果(你正在做什么),而是想比较你传递给它的变量。

;如果(int)。TryParse(myColMonth, out myColMonth) <= myMostRecentActualMonth)

需要变成;

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

首先检查你解析出一个int,然后做比较。

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;
         }
     }        

你可以这样重写你的代码,首先你需要另一个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;
    }
}