2010-05-30 105 views
1

這是我認爲會比實際情況更容易的東西。無論出於何種原因,我似乎無法找出一種方法,使我想要在這裏做與if語句工作:爲datagrid值創建一個IF語句

List<int> miscTimes = new List<int>(); 

      for (int i = 0; i < MISCdataGridView1.RowCount; i++) 
      { 
       if (MISCdataGridView1.Rows[i].Cells[2].Value == "Something") 
       { 
        miscTimes.Add(Convert.ToInt32(MISCdataGridView1.Rows[i].Cells[3].Value)); 
       } 
      } 
      return miscTimes; 

出於某種原因,我不能得到它喜歡什麼我用if語句做:

if (MISCdataGridView1.Rows[i].Cells[2].Value == "Something") 

它不會拋出異常,但它不構建我的列表。它有綠色的下劃線,並說:「可能意外的參考比較;將左側類型投射到'字符串'」 我試過轉換爲字符串和所有這些。我應該怎麼做呢?

+1

爲什麼?怎麼了? – SLaks 2010-05-30 22:41:32

+0

假設我應該更具描述性。它不會拋出異常,但它不構建我的列表。它有綠色下劃線,並說:「可能的意外參考比較;將左側類型轉換爲'string'」 – EvanRyan 2010-05-30 22:48:31

回答

2

DataGridViewCell.Value屬性是Object類型的,因此你必須轉換爲String

(String)dataGridview.Rows[i].Cells[j].Value == "Something" 

還是要靠Object.Equals()

Object.Equals(dataGridview.Rows[i].Cells[j].Value, "Something") 

使用Object.Equals()更堅固,因爲它可以處理不被String類型的值。另一方面,使用演員強調值的值必須爲String,如果不是,則會拋出異常 - 清楚地表明您可能有錯誤。

0

Value屬性是類型Object
因此,您使用標準==運算符,該運算符通過引用來比較對象。

要正確比較字符串,您需要按值進行比較。 (因爲你可以有兩種不同的String情況下保持相同的值)

將其更改爲

if ((string)MISCdataGridView1.Rows[i].Cells[2].Value == "Something") 
0

它看起來像「值」返回一個對象,你是對的字符串比較,所以它是比較參考資料,當你可能想比較的價值,即「東西」。將左側轉換爲一個字符串(或者調用ToString(),無論如何,只要確保您明確地比較了兩個字符串)。