如何在C#输入验证函数中传入自定义校验规则?
C#输入验证函数扩展自定义校验条件的实现方法
你写的基础输入验证函数GetInt()可以正常校验输入是否为整数,现在要扩展支持自定义校验条件,你的思路方向是对的,只需要用C#的委托类型来实现条件的传递。
原函数代码
private static int GetInt() { int tryInt; while (true) { if (int.TryParse(Console.ReadLine(), out tryInt)) return tryInt; else Console.Write("Try again:"); } }
修改方案:使用委托传递校验条件
C#里可以用Func<int, bool>或者Predicate<int>作为参数,接收一个整数并返回布尔值的校验逻辑。这里推荐用Func<int, bool>,因为它更通用,能适配更多场景。
修改后的函数代码如下:
private static int GetInt(Func<int, bool> validationCriteria) { int tryInt; while (true) { // 先校验是否为整数,再校验自定义条件 if (int.TryParse(Console.ReadLine(), out tryInt) && validationCriteria(tryInt)) return tryInt; else Console.Write("Try again:"); } }
调用示例(满足大于20的奇数)
当你需要校验输入是大于20的奇数时,直接用Lambda表达式传递校验逻辑:
// 调用GetInt,传入自定义校验条件 int validNumber = GetInt(n => n > 20 && n % 2 != 0);
其他扩展场景
这种方式可以灵活适配各种校验需求,比如:
- 输入必须是10到100之间的偶数:
GetInt(n => n >=10 && n <=100 && n%2 ==0) - 输入必须是正整数:
GetInt(n => n >0)
对你修改思路的回应
你之前的修改思路完全正确,只是需要用C#内置的委托类型替换<criteria>占位符,Func<int, bool>就是用来承载这种“输入整数、返回是否符合条件”的逻辑的类型。
内容的提问来源于stack exchange,提问作者Simcha Bryzgalov
相关产品推荐
相关产品推荐

