String.Format とStrings.Format

仕事で大ハマリしたのでメモ。
String.Formatは、.NET FrameworkのSystem.Stringクラスにある。(文字コードUTF-16ベース)
Strings.Formatは、Microsoft.VisualBasic.Stringsクラスにある。

(以下サンプルはVB.NETで書きます)

それぞれ引数が違ってて、
String.Formatは(format As String, arg0 As Object)と取るのに対し、
Strings.Formatは(Expression As Object, Style As String)で順番が違う上に、引数のfomatとStyleそれぞれの指定方法が違う。(ここで大ハマリした)

String.Formatは、.NETっぽく、"{0}" とか、"{0:yyyyMMdd}"とか、"{0:0000}"等と指定できるのに対し、
Strings.Formatは旧VB(VB6)からの互換っぽいメソッドなので、指定方法が"0000" とか"yyyyMMdd"とかの指定方法になる。

String.FormatはParamArrayがサポートされており、String.Format("{0}, {1}, {2}", arg0, arg1, arg2)みたいに複数の引数とフォーマットがサポートされているのに対し、
Strings.FormatはExpressionにあたる変換元パラメータが一つだけ。

あと、String.Formatは、String.Format って書くのに対して
Strings.Formatは、(VB.NET上では)ただ単にFormatって書くとそれがStrings.Formatとして認識される。(表示されるパラメータの順序が違うのでIntellisenseでわかる)

同じコード(クラス)内にString.FormatとStrings.Formatが混在してややこしくなった昨日の午後。
まだリファクタリングしてない。明日やる。