在 C# 中仅接受方法的某些字符串
本文关键字:字符串 方法 | 更新日期: 2023-09-27 18:33:35
我在 C# 中创建了一个方法,如下所示
public static IEnumerable<User> QueryTheAD(string filter, string identifier) {
if ( filter == "ANiceString" ) {
// sexy code here
}
}
效果很好。但是,VS 正确地表明并非所有代码路径都返回值。
因此,我是否可以指定过滤器只能是其中之一:
- "家教"
- "年"
- "第二名"
也许你应该使用枚举而不是字符串? :)
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
}