String.Compareメソッドは、CompareToメソッドと同じ動作をする静的メソッドです。 Equalsメソッドは、静的メソッドとしても用意されています。 戻り値はインスタンスメソッドの場合と同じです。
文字列aとbの関係 | String.Compare(a, b)の戻り値 | 例 |
---|---|---|
並べ替えたときにaの方がbよりも前 (aはbよりも小さい) |
0より小さい値 | "ABC" < "ABD" null < "ABC" |
並べ替えたときにaとbは同じ位置 (aとbは等しい) |
0 | "ABC" = "ABC" null = null |
並べ替えたときにaの方がbよりも後 (aはbよりも大きい) |
0より大きい値 | "ABC" > "ABB" "ABC" > null |
String.Compare・Equalsメソッドで2つの文字列の大小関係・等価関係の比較を行う
Imports System
Class Sample
Shared Sub Main()
Dim s1 As String = "foo"
Dim s2 As String = "bar"
Dim s3 As String = "baz"
Console.WriteLine("Compare({0}, {1}) : {2}", s1, s2, String.Compare(s1, s2))
Console.WriteLine("Compare({0}, {1}) : {2}", s1, s3, String.Compare(s1, s3))
Console.WriteLine("Compare({0}, {1}) : {2}", s2, s3, String.Compare(s2, s3))
Console.WriteLine("Compare({0}, {1}) : {2}", s2, s2, String.Compare(s2, s2))
Console.WriteLine("Equals({0}, {1}) : {2}", s1, s2, String.Equals(s1, s2))
Console.WriteLine("Equals({0}, {1}) : {2}", s1, s3, String.Equals(s1, s3))
Console.WriteLine("Equals({0}, {1}) : {2}", s2, s3, String.Equals(s2, s3))
Console.WriteLine("Equals({0}, {1}) : {2}", s2, s2, String.Equals(s2, s2))
End Sub
End Class
実行結果
Compare(foo, bar) : 1 Compare(foo, baz) : 1 Compare(bar, baz) : -1 Compare(bar, bar) : 0 Equals(foo, bar) : False Equals(foo, baz) : False Equals(bar, baz) : False Equals(bar, bar) : True
インスタンスメソッドでも静的メソッドでも結果は同じですが、想定される状況により使い分けることが出来ます。 例えば、静的メソッドのCompareとEqualsを使うと、仮に文字列変数にnull
/Nothing
が代入されていてもヌル参照を引き起こさずに済みます。 (null
との比較や、null
同士の比較を行っても例外エラーにはなりません)
Stringクラスのインスタンスメソッド・静的メソッドの比較
using System;
class Sample {
static void Main()
{
string s1 = null;
var s2 = "foo";
Console.WriteLine(String.Compare(s1, s2)); // s1がnullでもエラーにはならない
Console.WriteLine(s1.CompareTo(s2)); // s1がnullであるためNullReferenceExceptionがスローされる
}
}
Stringクラスのインスタンスメソッド・静的メソッドの比較
Imports System
Class Sample
Shared Sub Main()
Dim s1 As String = Nothing
Dim s2 As String = "foo"
Console.WriteLine(String.Compare(s1, s2)) ' s1がNothingでもエラーにはならない
Console.WriteLine(s1.CompareTo(s2)) ' s1がNothingであるためNullReferenceExceptionがスローされる
End Sub
End Class