2010-05-30 3 views
1

C'est quelque chose que je pensais être plus facile que ça ne l'était. Pour une raison quelconque, je ne peux pas sembler trouver un moyen de faire ce que je suis en train de faire ici travailler avec une instruction If:Création d'une instruction IF pour la valeur du DataGrid

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; 

Pour une raison quelconque, je ne peux pas à quoi que ce soit comme Je fais avec l'instruction if:

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

il ne lance pas d'exception, mais il ne construit pas ma liste Il a le soulignement vert et dit "Comparaison de référence non intentionnelle possible, cast le type de côté gauche à" chaîne "" J'ai essayé de convertir en chaîne et tout cela. Comment dois-je m'y prendre?

+1

Pourquoi? Ce qui se produit? – SLaks

+0

Supposons que j'aurais dû être plus descriptif. Il ne lance pas d'exception, mais il ne construit pas ma liste. Il a le soulignement vert et dit "Comparaison de référence involontaire possible, le type de côté gauche à" chaîne "" – EvanRyan

Répondre

2

La propriété DataGridViewCell.Value est de type Object et donc vous devez jeter à String

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

ou se fonder sur Object.Equals().

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

L'utilisation Object.Equals() est plus robuste, car il peut faire face à la valeur de ne pas être de type String. D'autre part, l'utilisation de la distribution met l'accent sur le fait que la valeur doit être String et lèvera une exception si ce n'est pas le cas - ce qui montre clairement que vous avez probablement un bug.

0

La propriété Value est du type Object.
Par conséquent, vous utilisez l'opérateur standard ==, qui compare les objets par référence.

Pour comparer les chaînes correctement, vous devez les comparer par valeur. (Parce que vous pouvez avoir deux différentes instances String tenant la même valeur)

Modifier à

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

Il semble que « la valeur » renvoie un objet et que vous comparez à une chaîne, il est donc comparer références, quand vous voulez probablement comparer la valeur, à savoir, "Quelque chose". Convertissez le côté gauche en une chaîne (ou appelez ToString(), peu importe, assurez-vous de comparer explicitement deux chaînes).