2013-03-14 4 views
1

Я чувствую себя глупо, спрашивая об этом, потому что либо я пропускаю что-то невероятно простое, либо вообще не понимаю функцию tryParse.Сравнивая значение результата int.TryParse

В терминах laymans то, что я хочу сделать в следующем коде, имеет цикл кода через все столбцы в datagridview. Если последние 2 символа имени столбца являются числовыми, я хочу сравнить числовое значение последних двух символов (используя int.TryParse) с другой переменной. по существу я хочу, чтобы все мои столбцы читали только expet для тех столбцов, где последние 2 цифры могут быть преобразованы в целое число, и это целое число больше, чем vairable, с которым я сравниваюсь.

Мой код ниже, вероятно, является немного обыденным, поскольку я пытаюсь пройти шаг за шагом, задавая переменные перед 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 минут после того, как я его разместил (вздох) –

+0

@RyanWard - На самом деле огромная причина, по которой я отправляю вопросы по StackOverflow, это гарантирует, что я выясню это самостоятельно через 30 секунд. –

0

int.TryParse имеет тип возвращаемого значения BOOL:

Try происходит здесь:

 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 (что вы делаете), вместо этого вы хотите сравнить с переменной, которую вы передаете в нее.

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