2012-01-31 10 views
4

私は、特定の項目を最初のパラメータとして渡すことを許可する関数を作成したいと思います。関数の定義済みパラメータ

これは

showme("error"); 
or showme("warning"); 
or showme("info"); 

を行うことができます

"error", "warning", "info" 

はその後、呼び出しは次のようになります。それだけで以下の文字列を許可する必要がありますか?私は

showme(string type){} 

を定義することができます知っているが、理想的に、私はRozuurさんのコメントを1としてshowme(string type "error"){}

+7

なぜenumsを使用していないのですか? – Rozuur

+0

詳細は、十分に明確ではありません。私はあなたを立たせることができません –

+0

おかげでRozuur私は使用法については不明でした、アリは申し訳ありませんが、質問は非常に明確であり、例を与えても! – Neo

答えて

4

私はあなたがプライベートコンストラクタを持つクラスに値のあなたのセットに依存ロジックをラップし、いずれかによってインスタンスを取得することができますenum

public enum ErrorType { 
    error, 
    warning, 
    info 
} 

public void ShowMe(ErrorType errorType) { 
    switch (errorType) { 
     case ErrorType.error: 
     //do stuff 
     break; 
     case ErrorType.warning: 
     //do stuff 
     break; 
     case ErrorType.info: 
     //do stuff 
     break; 
     default: 
     throw new ArgumentException("Invalid argument supplied"); 
     break; 
    } 
} 

//Invoke the method 
ShowMe(ErrorType.info); 
+0

enum *を使用しても、 'error'、' warning'、 'info'以外の値は' ShowMe'に渡されません。 – dtb

+0

@dtb、もう少し説明できますか?上記の例では、 'ErrorType'以外の型が' ShowMe'に渡された場合、コンパイラはエラーを生成しませんか? –

+1

はい、 'ErrorType'以外の型が' ShowMe'に渡された場合、コンパイラはエラーを生成します。しかし、私は 'ErrorType.error'、' ErrorType.warning'、 'ErrorType.info'以外の' ErrorType'型の値について話していました。たとえば、 'ShowMe'に'(ErrorType)42'を渡すと、コンパイル時や実行時エラーがなくなります。だからあなたは 'デフォルト'の場合が必要です。 – dtb

0

を提案しますシングルトンプロパティまたはファクトリメソッドを使用します。以下のような

何か:

public class StringConstraint 
{ 
    private StringConstraint() 
    public static readonly StringConstraint error = new StringConstraint() 
    ... 

    public void DoStuffWithStringValue() 
    { 
     // Here you do the logic that depends on your particular string value 
     // e.g. (always) log a message as an error 
    } 
} 

これは今まであなたが3つの文字列ごとに実装するロジックに準拠してインスタンスを渡すことができ義務づけます。

関連する問題