2011-02-01 18 views
0

私は比較したい2つの文字列を持っています。文字列比較の問題

Aは、プロパティがHeaderのSilverlightユーザーコントロールです。

Bは、System.Stringです。

私はそうのように比較する場合:

if(A.Header == B) 

は、私は、彼らは同じではないことになっています。

VS2010の値をクイックウォッチで調べると、値は同じです。両方のオブジェクトでGetTypeを実行すると、両方ともSystem.Stringであることがわかります。

私はちょうどString.Compareとそれらを比較することができます知っています。

私は文字列で==を実行すると常に値を比較します。私が使用しているこのSilverlightコントロールではちょっと変わったことがありますか?誰も私がここで何が欠けているか説明できますか?

ありがとうございました。

+0

を答えを与えるため、このスレッドでジョンに

おかげ 'String.compare'リターン' true'をしていますか? – detunized

+0

'string.Compare'は文字列が等しいことを返しますか? – ChrisF

+0

いいえ私はちょうどダブルチェックしました –

答えて

0

同じ長さですか?たぶんそこには後続のスペースや先導スペースがあります。

char[] arrayA = A.Header.ToCharArray(); 
char[] arrayB = B.ToCharArray(); 

をしてVS.でそれらを調べる:

0

これを試してみてください彼らはどこが違うのかはっきりしているはずです。

+0

これは**正しくありません**。'=='演算子は、参照の等価性ではなく、値の等価性をテストするための 'String'型のためにオーバーロードされます。これは '=='演算子とほぼ同じ意味を持ちます。ニュアンスの概要については、[この質問](http://stackoverflow.com/questions/3678792/c-are-string-equals-and-operator-really-same)を参照してください。 –

+0

それは本当ではありません。演算子==はEquals()メソッドを使用して実装され、その値を使用して両辺を比較します。 http://msdn.microsoft.com/en-us/library/system.string.op_equality.aspxを参照してください –

+0

編集に応じてdownvoteを削除しました。私は同じことを考えるかもしれない他の誰かに明確にするために私のコメントを残します。 –

0

これらは、後ろにスペースがあるか、同じに見えますが、実際の文字コードが異なります。キリル文字のようにеは、ラテン語のeのように見えるかもしれませんが、それらは同じではありません。文字を繰り返し処理し、それらがすべて同じかどうかを確認してください。

0

大文字と小文字の違い、大文字と小文字の違い、同じように見える文字が含まれている可能性がありますが、文字コードは異なります。

は、以下のことを試してみてください。

if (string.Compare(A.Header.Trim(), B.Trim(), StringComparison.OrdinalIgnoreCase) == 0) 
{ 
    .. 
} 
+0

文字列を比較するより適切な方法は、静的[string.Compare(a、b、compare)](http://msdn.microsoft.com/en-us/library/e6883c06.aspx)メソッドとなります。 – slugster

+0

言語を混ぜる:-) –