只接受C#中某个方法的某些字符串

时间:2012-05-09 17:46:26

标签: c# visual-studio

我在C#中创建了一个方法,如下所示

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

运作良好。然而,VS正确地表明并非所有代码路径都返回一个值。

因此,我可以指定过滤器只能是以下之一:

  • “家庭教师”
  • “年”
  • “SecondName”

6 个答案:

答案 0 :(得分:14)

也许你应该使用枚举而不是字符串? :)

enum filterEnum
{
   Tutor,
   Year,
   SecondName
}

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

享受;)

答案 1 :(得分:7)

如果传递了无效的字符串,请使用枚举或抛出ArgumentException

虽然枚举只映射到数字,但是如果由于某种原因需要字符串名称,则可以始终使用枚举值到字符串的映射。

答案 2 :(得分:4)

不允许这种类型的编译时间限制。该方法的实现必须处理所有string值。如果一个人不符合该方法的合同,那么你应该抛出异常

答案 3 :(得分:3)

无效参数的正常行为是抛出ArgumentException。

答案 4 :(得分: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");
    }
}

答案 5 :(得分:1)

答案取决于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要求其中一个必需值:

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

public static IEnumerable<User> QueryTheAD(LegalValues filter, string identifier)
{
     // sexy code here
}