2013-03-14 101 views
1

我觉得有点傻这么问,因为我错过了一些非常容易的事情,或者根本不了解tryParse函数。比较int.TryParse结果的值

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

我的代码下面可能有点平凡,因为我试图通过一步一步的设置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; 
        } 
       }   

回答

2

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

所以你会希望是这样的:

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

谢谢迈克。本质上,我想出了一个类似的解决方案,因为当你知道40分钟的工作后,我知道我发布它后10分钟(叹气) – 2013-03-14 19:16:15

+0

@RyanWard - 实际上,我在StackOverflow上发布问题的一个重要原因是因为它保证我会在30秒后自行解决。 – 2013-03-14 19:17:53

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

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

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

需要成为;

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

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

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