オプションのパラメータのデフォルト値をリソースファイル内の何かに設定しようとすると、コンパイル時に次のエラーが発生します。
'message'のデフォルトのパラメータ値は、コンパイル時定数でなければなりません。
これを可能にするためにリソースファイルの動作を変更する方法はありますか?
public void ValidationError(string fieldName,
string message = ValidationMessages.ContactNotFound)
この場合、ValidationMessages
はリソースファイルです。
いいえ、デフォルトでリソースを直接機能させることはできません。あなたがする必要があるのは、デフォルト値をnullのようなものに設定し、パラメータがメソッドの本体にデフォルト値を持っているときにリソースルックアップを実行することです。
1つのオプションは、デフォルト値をnull
にして、それを適切に設定することです。
public void ValidationError(string fieldName, string message = null)
{
string realMessage = message ?? ValidationMessages.ContactNotFound;
...
}
もちろん、これはnull
を真の値として許可したくない場合にのみ機能します。
別の潜在的なオプションは、リソースに基づいてconst
文字列でいっぱいのファイルを作成するビルド前のステップを持つことです。次に、それらの定数を参照できます。しかし、それはかなり厄介でしょう。
もう1つのオプションは、メソッドを2つに分割し、次のように一方のオーバーロードでもう一方を呼び出すことです。
public void ValidationError(string fieldName)
{
ValidationError(fieldName, ValidationMessages.ContactNotFound);
}
public void ValidationError(string fieldName, string message)
{
...
}
この方法では、null
をそのパラメーターの有効な値でもある場合に、message
の値として渡すこともできます。