23

オプションのパラメータのデフォルト値をリソース ファイル内の何かに設定しようとすると、次のコンパイル エラーが発生します。

'message' の既定のパラメーター値は、コンパイル時の定数でなければなりません。

これを可能にするためにリソース ファイルの動作を変更する方法はありますか?

public void ValidationError(string fieldName, 
                            string message = ValidationMessages.ContactNotFound)

この中にValidationMessages、リソースファイルがあります。

4

3 に答える 3

15

1つのオプションは、デフォルト値を作成し、nullそれを適切に設定することです。

public void ValidationError(string fieldName, string message = null)
{
    string realMessage = message ?? ValidationMessages.ContactNotFound;
    ...
}

nullもちろん、これは、本物の値として許可したくない場合にのみ機能します。

もう1つの潜在的なオプションはconst、リソースに基づいて文字列でいっぱいのファイルを作成するビルド前のステップを用意することです。次に、それらの定数を参照できます。しかし、それはかなり厄介でしょう。

于 2010-04-28T13:09:07.190 に答える
12

いいえ、デフォルトでリソースを直接機能させることはできません。あなたがする必要があるのは、デフォルト値をnullのようなものに設定し、パラメータがメソッドの本体にデフォルト値を持っているときにリソースルックアップを実行することです。

于 2010-04-28T13:08:58.627 に答える
12

もう 1 つのオプションは、次のように、メソッドを 2 つに分割し、一方のオーバーロードが他方を呼び出すようにすることです。

public void ValidationError(string fieldName)
{ 
    ValidationError(fieldName, ValidationMessages.ContactNotFound);
}

public void ValidationError(string fieldName, string message)
{
    ...
}

この方法では、そのパラメーターの有効な値でもある場合にnull値として渡すこともできます。message

于 2012-02-19T12:16:37.740 に答える