2 Stimmen

Völlig seltsames Verhalten bei grundlegendem Zeichenfolgenvergleich

Das ergibt für mich keinen Sinn. Muss falsch oder offensichtlich sein.

Nach dem Zuschneiden habe ich in VB.NET 2 Variablen mit den folgenden Werten:

strTag = "<#vermittler_person_Name>"
tmp    = "<#vermittler_person_Name>"

Ein Vergleich der Variablen ergibt ein False:

strTag = tmp ' ==> false

Ein direkter Vergleich der Werte ergibt ein True:

"<#vermittler_person_Name>" = "<#vermittler_person_Name>" ' ==> true

Beide sind Strings, ich habe alle möglichen Methoden ausprobiert: string.compare, string.equals, auch regex usw. usw. Alles funktioniert perfekt mit allen anderen Strings ähnlicher Struktur, nur nicht und nur nicht mit

"vermittler_person_Name"

in der Mitte... Irgendwelche Ideen?

8voto

Jon Skeet Punkte 1325502

Ich vermute stark, dass obwohl die beiden angezeigten Zeichenfolgen gleich waren, die internen Daten nicht gleich waren. Es könnten beliebig viele nicht druckbare Zeichen enthalten sein.

Wenn es Ihnen gelingt, dies zu reproduzieren, schlage ich vor, den Unicode-Wert jedes Zeichens der fehlerhaften Zeichenfolgen zu überprüfen. Wenn ich recht habe, werden wir dies nicht über einen SO-Beitrag reproduzieren können, der nur die sichtbaren Zeichen enthält, aus offensichtlichen Gründen.

3voto

Beth Punkte 9425

Sie können die Längen der beiden Zeichenfolgen überprüfen, um zu sehen, ob sie gleich sind, oder beide in den gleichen Fall umwandeln (groß oder klein), um zu sehen, ob das den Unterschied verursacht

0voto

shahkalpesh Punkte 32505
dim strTag as String 
dim tmp as String 

strTag = "<#vermittler_person_Name>"
tmp = "<#vermittler_person_Name>"

Console.WriteLine(strTag = tmp) 'prints True

Könnten Sie den Code posten, wo der Vergleich durchgeführt wird?

EDIT: Bevor Sie den Vergleich durchführen, geben Sie den Inhalt zur Konsole aus, um zu sehen, ob sie sich unterscheiden

Console.WriteLine(strTag)
Console.WriteLine(tmp)

0voto

JaredPar Punkte 699699

Ich kann dieses Problem nicht reproduzieren. Ich habe den folgenden Code in VS2008 RTM ausprobiert und der Wert lautet True

Sub Main()
    Dim strTag = "<#vermittler_person_Name>"
    Dim tmp = "<#vermittler_person_Name>"
    Dim same = strTag = tmp
    Stop
End Sub

Können Sie bitte einen ausführbaren Beispielcode Ihres Problems bereitstellen? Inklusive der Visual Studio-Version und der Optionen (Strict, Explicit, etc ...)

0voto

hashable Punkte 3711

Ich habe keine Erfahrung mit VB/.NET, aber das klingt ähnlich wie das Verhalten in Java.

In Java deklarierst du zwei String-Objekte.

String a = new String("aa");
String b = new String("aa");

a.equals(b) wird true zurückgeben, aber a==b wird false zurückgeben.

Außerdem wird "aa"=="aa" true zurückgeben.

Dies liegt daran, dass "aa" ein literaler String ist (ähnlich wie ein Primitiv), während a und b zwei verschiedene Objekte sind, die sich im Speicher unterscheiden.

Das Verhalten von VB/.NET könnte ähnlich sein (keine Ahnung).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X