C#如何实现检查值匹配所有预设条件的功能
问题根源
你声明的List<bool> conditionsToCheck是布尔值集合,只能存储固定的true/false值,无法存储可执行的校验方法。你尝试对布尔值执行conditionsToCheck[i](wordToCheck)这类方法调用操作,所以编译器抛出method name expected(需要方法名)错误。
修复方案
你需要用.NET内置的泛型委托Func<string, bool>定义集合类型,该委托代表「接收1个string类型参数、返回bool类型结果」的方法,完全匹配你的校验场景。
修正后完整代码
using System.Collections.Generic; using System.Linq; // 需引入LINQ命名空间简化校验逻辑 // 存储所有校验委托的集合 public List<Func<string, bool>> conditionsToCheck = new List<Func<string, bool>>(); /// <summary> /// 校验单词是否满足所有条件 /// </summary> public bool IsWordValid(string wordToCheck) { // 所有校验规则都返回true时整体结果才为true,任意规则不满足直接终止校验 return conditionsToCheck.All(checkFunc => checkFunc(wordToCheck)); } /// <summary> /// 添加校验规则 /// </summary> public void AddConditionToCheck(Func<string, bool> condition) { conditionsToCheck.Add(condition); }
使用示例
// 可以直接用Lambda表达式添加校验规则 AddConditionToCheck(word => word.Length >= 3); // 规则1:长度不小于3 AddConditionToCheck(word => !word.Contains(" ")); // 规则2:不能包含空格 // 也可以传入符合签名的自定义方法 bool CheckNoNumber(string word) { return !word.Any(char.IsDigit); } AddConditionToCheck(CheckNoNumber); // 规则3:不能包含数字 // 执行校验 Console.WriteLine(IsWordValid("abc")); // 输出True Console.WriteLine(IsWordValid("a1 bc")); // 输出False
内容的提问来源于stack exchange,提问作者Omis
相关产品推荐
相关产品推荐

