2

文字列型の1つのパラメータ/引数を持つ関数があります:

        public void foo(String myParam)
        {
           //do something
        }

文字列の可能な値は制限されており(「test」、「test2」、「test3」など)、myParamの値が異なるとエラーが発生します。

myParamの値をチェックするスイッチケースなしでmyParamの可能な値を制限することは可能ですか?

必要な実際の値をラップする別のオブジェクトを関数に渡すことも可能です。

そのための標準/最善の方法の解決策はありますか?

4

3 に答える 3

10

列挙型を作成できます

public enum MyParam
{
    test,
    test2,
    test3
}

そしてToString、あなたの文字列表現を取得するために使用しますenum

public void foo(MyParam myParam)
{
    if(!Enum.IsDefined(typeof(MyParam),myParam))
        throw new ArgumentException();
    myParamString = myParam.ToString();
}
于 2013-03-06T12:46:14.330 に答える
1

このような値を制限する唯一の方法は、それらをチェックすることです。

文字列の直接比較または正規表現の一致を使用できます。文字列が失敗した場合は、一致がスローされInvalidArgumentExceptionます。

もう1つのオプションは、文字列をラップするクラスを作成することです。クラスの構築時に(ラップされた文字列をコンストラクター引数として渡す)、上記のようにテストします。

于 2013-03-06T12:45:54.710 に答える
0

考えてみてくださいRegular Expressions; .NETは、 -classSystem.Text.RegularExpressionsがある名前空間を提供します。Regex

public void foo(String myParam){

Regex regex = new Regex(@"test\d");
if(regex.IsMatch(myParam))
   //myParam matches regex
}

RegExに関する情報もあるMSDNを参照してください。

于 2013-03-06T12:47:38.917 に答える