2013-03-14 96 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; 
     } 
    }