在 C# 中仅接受方法的某些字符串

本文关键字:字符串 方法 | 更新日期: 2023-09-27 18:33:35

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

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

效果很好。但是,VS 正确地表明并非所有代码路径都返回值。

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

  • "家教"
  • "年"
  • "第二名"

在 C# 中仅接受方法的某些字符串

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

enum filterEnum
{
   Tutor,
   Year,
   SecondName
}
public static IEnumerable<User> QueryTheAD(filterEnum filter, string identifier) 

享受;)

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

虽然枚举仅映射到数字,但您始终可以从枚举值映射到字符串,以防出于某种原因需要字符串名称。

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

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

简单的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");
    }
}

答案取决于当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
}