3

以下に示すように、C#でメソッドを作成しました

public static IEnumerable<User> QueryTheAD(string filter, string identifier) {
  if ( filter == "ANiceString" ) {
    // sexy code here
  }
}

これはうまく機能します。ただし、VSは、すべてのコードパスが値を返すわけではないことを正しく示しています。

したがって、フィルターは次のいずれかになります。

  • 「家庭教師」
  • "年"
  • "ミドルネーム"
4

6 に答える 6

15

文字列の代わりに列挙型を使用する必要がありますか? :)

enum filterEnum
{
   Tutor,
   Year,
   SecondName
}

public static IEnumerable<User> QueryTheAD(filterEnum filter, string identifier) 

楽しみ ;)

于 2012-05-09T17:48:18.850 に答える
7

ArgumentException無効な文字列が渡された場合は、列挙型を使用するか、スローします。

列挙型は数値にのみマップされますが、何らかの理由で文字列名が必要な場合に備えて、列挙型の値から文字列へのマッピングを常に持つことができます。

于 2012-05-09T17:48:41.917 に答える
4

いいえ、このタイプのコンパイル時間の制限は許可されていません。メソッドの実装では、すべてのstring値を処理する必要があります。メソッドの契約に適合しない場合は、例外をスローする必要があります

于 2012-05-09T17:49:05.937 に答える
3

無効な引数に対する通常の動作は、ArgumentException をスローすることです。

于 2012-05-09T17:48:46.157 に答える
2

シンプルはswitchどうですか?

public static IEnumerable<User> QueryTheAD(string filter, string identifier) {
    switch (filter)
    {
        case "Tutor":
            //code here  
            break;

        case "Year":
            //code here  
            break;

        case "SecondName":
            //code here  
            break;

        default:
            throw new ArgumentException("filter", "Unacceptable value of filter");
    }
}
于 2012-05-09T17:50:53.867 に答える
1

答えは、これら3つの文字列のいずれでもfilterない場合の動作によって異なります。

これらのいずれかが必要な場合は、ArgumentExceptionをスローする必要があります。

public static IEnumerable<User> QueryTheAD(string filter, string identifier) 
{
    if(filter != "Tutor" || filter != "Year" || filter != "SecondName") throw new ArgumentException ("filter");

    // sexy code here
}

または、を使用しenumて、必要な値の1つを要求します。

public enum LegalValues { Tutor = 1, Year = 2, SecondName = 3 }

public static IEnumerable<User> QueryTheAD(LegalValues filter, string identifier)
{
     // sexy code here
}
于 2012-05-09T17:51:22.117 に答える