【问题标题】:Comparing value of int.TryParse result比较 int.TryParse 结果的值
【发布时间】:2013-03-14 19:05:59
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    所以你想要的是这样的:

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

    【讨论】:

    • 谢谢迈克。基本上我想出了一个类似的解决方案,因为你当然知道,经过 40 分钟的工作后,我在发布它 10 分钟后发现了它(叹气)
    • @RyanWard - 实际上我在 StackOverflow 上发布问题的一个重要原因是因为它保证我会在 30 秒后自己解决问题。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      需要成为;

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

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

      【讨论】:

        【解决方案4】:
        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;
                 }
             }        
        

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2011-10-29
            • 2019-07-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-22
            • 2015-06-19
            • 1970-01-01
            • 2015-10-02
            相关资源
            最近更新 更多