Передача лямбда-выражения в качестве параметра метода с FluentValidation - PullRequest
0 голосов
/ 04 февраля 2019

Я использую FluentValidation, чтобы выполнить некоторую проверку на стороне сервера с моей программой.Чтобы использовать некоторую пользовательскую проверку, я использую валидатор must, который позволяет вам передавать предикат и возвращать логическое значение, чтобы проверить, была ли проверка успешной.Проверка, которую я пытаюсь выполнить, включает проверку того, существует ли строка внутри массива.

Однако эти детали в значительной степени не имеют значения, поскольку мне просто нужно иметь возможность передать предикат в метод вместе со второй переменной string[].

Ниже приведен мой метод проверки:

public bool StringInArray(Func<string> predicate, string[] testArray)
        {
            if(testArray.Contains(predicate.Invoke()))
            {
                return true;
            }

            return false;
        }

И вот где я вызываю этот метод.

RuleFor(p => p.Funder)
                .Must(StringInArray(p => p, funderStrings));

funderStrings - это массив содержимого, которое япроверяю.p.Funder - это строка, которую я проверяю внутри массива.

Аргумент p => p неверен, и я получаю ошибку компиляции Delegate 'Func<string>' does not take 1 argument.Я не уверен, как мне передать строку в метод StringInArray.

1 Ответ

0 голосов
/ 04 февраля 2019

Либо вы хотите это:

    public bool StringInArray(Func<string, string> conversion, string[] testArray)
    {
        if (testArray.Any((s) => s.Equals(conversion(s))))
        {
            return true;
        }

        return false;
    }
    ...
    RuleFor(p => p.Funder).Must(() => StringInArray(p => p, funderStrings));

или это:

    public Func<bool> StringInArray(string s, string[] testArray)
    {
        return () => testArray.Contains(s);
    }
    ...
    RuleFor(p => p.Funder).Must(() => StringInArray(p => p, funderStrings));

Пожалуйста, уточните, что именно вы ожидаете от метода StringInArray, чтобы метод Mustполучить и сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...