代码之家  ›  专栏  ›  技术社区  ›  netmatrix01

使用func委托检查错误

  •  3
  • netmatrix01  · 技术社区  · 15 年前

    所以我最近学到了一个新的技巧,即使用func委托和lambda表达式来避免在代码中使用多个验证if语句。

    所以代码看起来像

     public static void SetParameters(Dictionary<string,object> param)
            {
                Func<Dictionary<string, object>, bool>[] eval = 
                {
                    e => e != null ,
                    e => e.Count ==2 ,
                    e  => e.ContainsKey("Star"),
                    e  => e.ContainsKey("Wars")
                };
    
                var isValid = eval.All(rule => rule(param));
    
                Console.WriteLine(isValid.ToString());
            }
    

    但我的下一步是我也要做一些错误检查。例如,如果计数!=2在上一个示例中,我希望编写一些错误集合,以便进一步了解更清晰的异常。

    所以我一直在想,我怎样才能用类似的func和lamdba符号来实现这一点呢?.

    我确实想出了我的规则检查课

    public class RuleChecker
        {
            public Dictionary<string, object> DictParam
            {
                get;
                set;
            }
    
            public string ErrorMessage
            {
                get;
                set;
            }
        } 
    

    有人能帮忙吗?我怎样才能做到?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Preet Sangha    15 年前

    您可以这样做:

            List<string> errors = new List<string>();
            Func<Dictionary<string, object>, bool>[] eval = 
            {
                e => { bool ret = e != null; if (!ret) errors.Add("Null"); return ret; },
    

    然而,一个更优雅的解决方案是

            List<string> errors = new List<string>();
            Func<bool, string, List<string>, bool> EvaluateWithError = (test, message, collection) =>
            {
                if (!test) collection.Add(message); return test;
            };
    
            Func<Dictionary<string, object>, bool>[] eval = 
            {
                e => EvaluateWithError(e != null, "Null", errors),