2015-01-20 5 views
1

Я написал эту небольшую программу в C#Сравнить две строки в двух различных способов

private void Form1_Load(object sender, EventArgs e) 
{ 
    MessageBox.Show(("7797302D875A8922EBFC7DECBD352FE88F35642F" == "‎7797302D875A8922EBFC7DECBD352FE88F35642F").ToString()); 

    var a = "7797302D875A8922EBFC7DECBD352FE88F35642F"; 
    var b = "7797302D875A8922EBFC7DECBD352FE88F35642F"; 
    MessageBox.Show((a == b).ToString()); 

} 

Первый MessageBox показывает «False», в то время как Messagebox показывает «True».

Мой вопрос: почему я не могу сравнить две строки с оператором ==?

+3

Возможно скопируйте & вставьте ошибку. – CodesInChaos

+0

Возможный дубликат [Являются ли операторы string.Equals() и == действительно одинаковыми?] (Http://stackoverflow.com/questions/3678792/are-string-equals-and-operator-really-same) –

+0

Возможный дубликат [C# .Equals(), .ReferenceEquals() и == operator] (http://stackoverflow.com/questions/3869601/c-sharp-equals-referenceequals-and-operator) –

ответ

10

Ваша вторая строка имеет невидимую Знак слева направо символ (U+200E).

Похоже, что это еще одна проблема с копией-пастой.

enter image description here

+2

Возможно, важно отметить, что вы действительно можете использовать оператор' == 'для строк. –

+0

@TimSchmelter Точно. Я не упомянул в своем ответе, потому что этот вопрос уже связан/закрыт как дубликат с http://stackoverflow.com/q/3678792/447156 и http://stackoverflow.com/q/814878/447156 в разделе комментариев. Также он может проверить это из [источника ссылки] (http://referencesource.microsoft.com/#mscorlib/system/string.cs 673), а также о том, как '==' перегружен для строк. –

+0

Благодарим вас за ответ. Некоторые, как я не думал об этом сам: D –

3

Разница не вызвана сравнением, а ваши строки тестовой строки.

Вторая строка первого корпуса начинается с невидимого 0x200E, юникода Слева направо метки.

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