1

我觉得问这个有点傻,因为要么我错过了一些非常简单的东西,要么根本不理解 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;
                    }
                }        
4

5 回答 5

2

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

所以你想要的是这样的:

int parsedMonth; // This will get set if myColMonth is a valid integer
if (int.TryParse(myColMonth, out parsedMonth) && parsedMonth <= myMostRecentActualMonth)
{
   // ...
}
于 2013-03-14T19:07:11.623 回答
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;
            }
        }   
于 2013-03-14T19:10:10.913 回答
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;
    }
}
于 2013-03-14T19:10:23.313 回答
0

TryParse返回一个布尔值,指示转换是否成功。您不想比较TryParse(您正在做什么)的结果,而是想与您传递给它的变量进行比较。

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

需要成为;

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

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

于 2013-03-14T19:10:46.760 回答
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;
         }
     }        
于 2013-03-14T19:11:51.163 回答