D'accord, c'est probablement très simple, mais j'ai les "chèques" ci-dessous Si je marche dans le code dans déboges em> Il affiche la valeur de Il semble que je coule em> tout en question à un (pas en même temps) code> et le premier em> toujours fort > Évalue à vrai tant que le seconde em> semble fort> travailler. Cela se produit effectivement dans chaque endroit que la valeur de la ligne est un nombre ou BOOL (date semble bien ...) code>. rangée ["PERSONID"] code> comme 162434 strong>, identique à tbxpersonid.editvalue code>. Est-ce juste une vérité basique et débutante sur la programmation que je manquais dans mon Hodge-Podge-Self-Education Code>? p> chaîne code> d'abord, je vais bien je voudrais juste savoir si je suis correct et S'il y a une règle générale sur ce que types code>, je devrais faire cela pour? p> ne fonctionne pas h2>
if (row["PersonID"].ToString() != tbxPersonID.EditValue.ToString())
{
row["PersonID"] = tbxPersonID.EditValue;
}
if (row["CitizenFlag"].ToString() != chkCitizen.EditValue.ToString())
{
row["CitizenFlag"] = chkCitizen.EditValue;
_whatChanged.Add("CitizenFlag");
}
6 Réponses :
Quel est le type d'EditValue ou la valeur droite? Le problème est probablement que EditValue n'est pas de type chaîne de type (c'est peut-être une sous-classe ou quelque chose), par conséquent, lorsque vous faites! = Ou == sur celui-ci, c'est faire une adresse de mémoire comparer au lieu du comparateur pour une chaîne par conséquent. de vrai p>
Si vous utilisez: P> ligne ["PERSONID"] code> est d'objet de type, ce qui signifie que! = et == utilisera identité de référence em>. Fondamentalement, vous comparez des valeurs en boîte. using System;
class Test
{
static void Main()
{
object first = 2;
object second = 2;
// Compares reference equality: false
Console.WriteLine(first == second);
// Compares value equality: true
Console.WriteLine(object.Equals(first, second));
}
}
Merci Jon, votre exemple fait un sens parfait! Je suis toujours malade que Dev est comme vous et d'autres personnes avec tant d'expérience sont disposés à arrêter et à expliquer quelque chose de si trivial à un débutant comme moi.
Aucun problème du tout - et je ne voudrais pas trop faire confiance à l'idée que j'ai "tant d'expérience". Vous devriez voir la somme des erreurs muettes que je fais chaque jour!
Merci, en tant que suivi, si ce n'est pas au-delà de la portée des commentaires code>; Est-ce une meilleure idée d'utiliser objet.equals () code> vs .tostring () code>?
@Jon, comme mal ombragé "certains"? :)
@Jage: Aargh. C'est terrible. Excuses sincères. @Refracted Paladin: Ce n'est pas une bonne idée de créer des représentations textuelles à moins que cela ne soit fondamentalement ce que vous voulez comparer. Cela dépend bien - voulez-vous (objet) 123L à égaler (objet) 123? (C'est-à-dire que la comparaison d'un encadré long avec une boîte en boîte.) Je dirais que, généralement si vous arrivez à ce stade, vous avez probablement d'autres problèmes.
Je ne sais pas sur C #, mais dans certaines langues, le test d'égalité est différent pour les valeurs et les chaînes numériques. Alors, vous devez donc forcer une comparaison de chaîne avant que cela fonctionne. P>
Cela nous dit-il quelque chose? P>
Je suppose que le type de données de la ligne [] est quelque chose comme Int (ou Bool) et le chkcizen.editvalue est d'un type de données différent. Vous pouvez donc comparer '1' == 1 et avoir le résultat être faux. P>
Sans appel à En utilisant Tostring () Code>, votre code teste l'égalité sur deux objets plutôt que deux numéros, donc la raison pour laquelle il ne fonctionne pas. P>
Tostring () CODE> VOUS RÉSISTREZ DE VOUS DIT Explicitement Le code Les valeurs obtiennent les valeurs à partir des objets ROND [] CODE> et EDITValue Objets. P>
"12345"! = 12345 P>
N'est-ce pas simplement un cas de comparer des références? Bien que si la valeur d'édition est une INT, je ne comprends pas ce comportement. En tout cas, avez-vous essayé des angles ()?
Pouvez-vous rendre le titre plus général et consultable?
@DANA: Merci pour la modification @ Orsandu63: Bien sûr, des suggestions? Je ne pensais pas que les gens seraient bien intéressés par cela ....
@HENK: Merci! Si j'avais su surveiller le titre comme ça en premier lieu, je doute que j'aurais besoin de poser la question! :)