我在 C# 中创建了一个方法,如下所示
public static IEnumerable<User> QueryTheAD(string filter, string identifier) {
if ( filter == "ANiceString" ) {
// sexy code here
}
}
效果很好。但是 VS 正确地表明并非所有代码路径都返回一个值。
因此,我是否可以指定过滤器只能是以下之一:
- “导师”
- “年”
- “第二个名字”
我在 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
}
或使用 anenum
来要求所需的值之一:
public enum LegalValues { Tutor = 1, Year = 2, SecondName = 3 }
public static IEnumerable<User> QueryTheAD(LegalValues filter, string identifier)
{
// sexy code here
}