我在C#中创建了一个方法,如下所示
public static IEnumerable<User> QueryTheAD(string filter, string identifier) {
if ( filter == "ANiceString" ) {
// sexy code here
}
}
运作良好。然而,VS正确地表明并非所有代码路径都返回一个值。
因此,我可以指定过滤器只能是以下之一:
答案 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
}