Проверка ошибок с использованием Func Delegate - PullRequest
3 голосов
/ 13 октября 2010

Итак, я недавно узнал об этой новой уловке использования Func Delegate и лямбда-выражения, чтобы избежать многократной проверки операторов 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());
        }

но мой следующий шаг - я бы тоже хотел проверить ошибки. Так, например, если count! = 2 в моем предыдущем примере, я хотел бы написать сборку сборок ошибок для более ясного исключения ниже.

Так что мне было интересно, как я могу добиться этого, используя аналогичные обозначения Func и Lamdba?

Я придумал свой класс проверки правил

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

        public string ErrorMessage
        {
            get;
            set;
        }
    } 

Может кто-нибудь помочь, как мне этого добиться?

1 Ответ

2 голосов
/ 13 октября 2010

вы можете сделать это:

        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),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...