前処理メッセージ
すべてのGetMessage(...)呼び出しで新しい配列を作成したくない場合は、最初にFirstValueを一度に1回Messageに挿入できます。そして、GetMessage(...)はstring.Format(...)のotherValuesパラメーターを使用します。
Messageプロパティは、FirstValueが設定された後、たとえばコンストラクターまたは次のようなinitメソッドで一度初期化されます。
void InitMessage()
{
Message = String.Format(Message, FirstValue, "{0}", "{1}", "{2}", "{3}", "{4}");
}
InitMessageメソッドは、 Messageの最初のインデックスをFirstValueで初期化し、残りのインデックスを "{index}"で初期化します。つまり、 "{0}"、 "{1}"、 "{2}"、...(params
メッセージインデックスよりも多くの要素) 。
これで、 GetMessageは次のような配列操作なしで String.Formatを呼び出すことができます。
public string GetMessage(params object[] otherValues)
{
return String.Format(Message, otherValues);
}
例:
次のプロパティ値を想定します:
this.Message = "First value is '{0}'. Other values are '{1}' and '{2}'."
およびthis.FirstValue = "blue"
。
InitMessageはメッセージを次のように変更します
"First value is 'blue'. Other values are '{0}' and '{1}'."
。
GetMessage呼び出し
GetMessage("green", "red")
結果は
"First value is 'blue'. Other values are 'green' and 'red'."
。