C# String Compare aus Datatable geht schief

OP #3578121
Lesenswert?
• ▲
▼
Hallo,

langsam weiß ich mir samt Google und was so dazukommt nicht mehr zu 
helfen:

Ich habe ein Datatable-Objekt, aus dem ich mir eine Row hole.
Diese ist mit verschiedenen Stringwerten befüllt.

Nun laufe ich eine Schleife durch die Spalten der Reihe und suche nach 
einem bestimmten Wert und dessen Index.
1
 DataTable dt = new DataTable();
2
            adapt.Fill(dt);
3
            DataRow row = dt.Rows[0];
4
            for (int i = 0; i < dt.Columns.Count; i++)
5
            {
6

7
                if (row.ItemArray[i].ToString() == "Suchwert")
8
                    index = i;
9
            }


Der gesuchte Wert ist vorhanden, nur der Stringcompare geht schief.
Ich komme nicht dahinter, was da nicht passen soll?
Auch mit string.Compare() haut das nicht hin - Groß-Kleinschreibung 
passt.
Der "Suchwert" kommt aus einer MSAccess Datenbank.

Hat jemand eine Erklärung?

danke
Gast #3578134
Lesenswert?
• ▲
▼
Vielleicht sehen die Strings nur gleich aus... lass dir mal eine 
binär/hex darstellung ausgeben (wegen unicode und so). Und ich weiss 
grad nicht wie das bei C# mit dem == ist - google mal nach C# reference 
equality. Denn in Java zB würde das so nicht gehen und du bräuchtest 
.equals()
OP #3578175
Lesenswert?
• ▲
▼
danke erstmal.

Die Werte habe ich mir mit einer MessageBox schon ausgeben lassen und 
vorerst sieht da alles normal aus.

Weiteres geht der string compare in C# mit == tadellos und ich habe es 
jetzt auch mit
1
  if (string.Compare(row.ItemArray[i].ToString(), "Suchwert", true, CultureInfo.InvariantCulture) == 0)

versucht und das geht auch nicht.

Wie kann ich mir denn die Werte in Hex ansehen?
Bzw. warum sollte ein String aus einer Datenbank nicht einem String 
Objekt aus dem Code gleichen?
Ich schreibe sie ja rein auch auf die Weise....
OP #3578326
Lesenswert?
• ▲
▼
So - Problem verstanden.


eigentlich recht witzige Geschichte - ich hab das Visual Studio 
blöderweise auf Release gestellt gehabt. (fürs Compilieren)

Da die Variable "index" nach dieser Funktion keine Verwendung mehr fand 
(aufgrund dass ich die Funktion ja gerade erst entwickle), hat mir der 
Compiler die Zuweisung dieser scheinbar weg optimiert.

Ein Console.Writeline(index.ToString()) nach dem if hat schon 
ausgereicht, damit es geht.

Wahnsinn, dafür hab ich jetzt einen halben Tag verbraucht :)
OP #3579178
Lesenswert?
• ▲
▼
Dr. Sommer schrieb:

> Das ist ja bitter. C++ Debugger zeigen bei "index" dann wenigstens
> "optimized out" o.ä. an s.d. man weiß dass die Zuweisung nicht mehr
> existiert...

Naja - im Nachhinein betrachtet fällt mir auf, dass der Compiler in der 
Debugconsole unten, als er das if übersprungen hat, auch eine Ausgabe 
tätigte:
"Thread terminated at 0x2154....".

Allerdings lässt sich drüber streiten, ob man das, wenn man es nicht 
weiß, beachtet...
(vor allem hat man i.d.R. die Rücksprungadressen nicht im Kopf :D )
Gast #3579187
Lesenswert?
• ▲
▼
Daniel V. schrieb:
> Naja - im Nachhinein betrachtet fällt mir auf, dass der Compiler in der
> Debugconsole unten, als er das if übersprungen hat, auch eine Ausgabe
> tätigte:
> "Thread terminated at 0x2154....".

das dürfte aber damit nicht zusammenhängen. Warum sollte sich am ende 
der Schleife ein Thread beenden? So mal die Meisten einfachen Programm 
nur einen Threads haben. Wenn diese beendet wird, ist das Programm weg.
Gast #3592408
Lesenswert?
• ▲
▼
Severino R. schrieb:
> Versuch's doch mal mitif
> (row.ItemArray[i].ToString().Equals("Suchwert"))

die Lösung war eine andere.

> Da die Variable "index" nach dieser Funktion keine Verwendung mehr fand
> (aufgrund dass ich die Funktion ja gerade erst entwickle), hat mir der
> Compiler die Zuweisung dieser scheinbar weg optimiert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren