2009-08-05 2 views
2

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

после нарезки и перетасовки, я получил 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 

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

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

обе строки, я пробовал всевозможные вещи: string.compare, strin g.equals, а также регулярное выражение и т.д. и т.п. все отлично работает со всеми другими строками с simlilar структурой, просто нет, и только не с

"vermittler_person_Name" 

в середине ... любые идеи?

+0

это не стенографический код. их назначение напрямую работает нормально. первые 2 строки - это результаты строковых операций, скопированных из поля watch-value ... (я не хотел размещать слишком много кода.) – handsomeGun

+0

VS2005 не может воспроизвести –

+0

первый состоит из этого strTag = openingTag & "" & tags (i) & "" & closedTag второй - довольно длинная строка из Outlook MailItem.HTMLbody – handsomeGun

ответ

8

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

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

+0

не будет отображаться в блокноте ++ или аналогично непечатаемым символам ? но в любом случае, замечательный момент! я попробую воспроизводимый код и вернусь обратно. благодаря! – handsomeGun

+0

@handsomeGun: Как бы вы скопировали их в блокнот ++ для начала? Если это отладчик, это может не помещать их в буфер обмена. –

+0

хорошо, они обычно копируются как «странные» символы. но вы на месте! .length показывают разницу в 1. Поэтому я буду прокручивать строки, чтобы обнаружить оскорбительный символ. (он не делал этого со многими десятками других в том же методе, вот почему я был так потрясен ..) спасибо! – handsomeGun

0
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 

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

EDIT: Перед тем, как сделать сравнение, распечатать содержимое на консоль, чтобы увидеть, если они отличаются

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

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

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 и опции (Строгий, Явный и т.д ...)

3

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

+0

проверенные случаи, попробуем длину прямо сейчас. благодаря! – handsomeGun

+0

yep, .length один. черт. Спасибо! – handsomeGun

0

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

В Java, вы объявите две строковые объекты.

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

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

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

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

Поведение VB/.NET может быть аналогичным (у меня нет подсказки).

+0

Не верно для строк в VB.net, хотя это верно для большинства ссылочных типов. –

Смежные вопросы