совершенно странное поведение при базовом сравнении строк - PullRequest
2 голосов
/ 05 августа 2009

это не имеет никакого смысла для меня. должно быть неправильно или до боли очевидно.

после нарезки и нарезки, я получил 2 переменные со следующими значениями в vb.net:

strTag = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;"
tmp    = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;"

сравнение переменных дает ложное:

strTag = tmp ' ==> false

Сравнение значений прямо здесь дает истинное значение:

"&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;" = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;" ' ==> true

обе строки, я пробовал все виды вещей: string.compare, string.equals, также regex и т. Д. И т. Д. Все отлично работает со всеми остальными строками с одинаковой структурой, только нет и только не с

"vermittler_person_Name"

в середине ... есть идеи?

Ответы [ 5 ]

8 голосов
/ 05 августа 2009

Я сильно подозреваю, что хотя две отображаемые строки были равны, внутренние данные не были равными. Там может быть любое количество непечатных символов.

Если вы можете воспроизвести это, я предлагаю вам посмотреть значение Unicode для каждого символа ошибочных строк. Если я прав, мы не сможем воспроизвести это через сообщение SO, которое содержит только видимые символы по очевидным причинам.

3 голосов
/ 05 августа 2009

вы можете проверить длину двух строк, чтобы увидеть, являются ли они одинаковыми, или преобразовать их в один и тот же регистр (верхний или нижний), чтобы узнать, не вызывает ли это разницу

0 голосов
/ 05 августа 2009

У меня нет опыта работы с VB / .NET, но это похоже на поведение в Java.

В Java вы объявляете два строковых объекта.

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

a.equals(b) вернет true, но a==b вернет false.

Также "aa"=="aa" вернет true.

Это потому, что "aa" - это буквальная строка (похожая на примитив), тогда как a и b - это два разных объекта, которые различаются в памяти.

Поведение VB / .NET может быть похожим (я понятия не имею).

0 голосов
/ 05 августа 2009

Я не могу воспроизвести эту проблему. Я попробовал следующий код VS2008 RTM и значение то же самое, что True

Sub Main()
    Dim strTag = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;"
    Dim tmp = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;"
    Dim same = strTag = tmp
    Stop
End Sub

Можете ли вы предоставить работающий образец кода вашей проблемы? Включая версию и параметры Visual Studio (строгое, явное и т. Д.)

0 голосов
/ 05 августа 2009
dim strTag as String 
dim tmp as String 

strTag = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;"
tmp = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;"

Console.WriteLine(strTag = tmp) 'prints True

Не могли бы вы выложить код, где он делает сравнение?

РЕДАКТИРОВАТЬ: перед сравнением распечатать содержимое на консоли, чтобы увидеть, если они отличаются

Console.WriteLine(strTag)
Console.WriteLine(tmp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...