传递lambda表达式与FluentValidation方法参数

问题描述 投票:1回答:1

我利用FluentValidation做一些服务器端验证我的计划。为了充分利用一些自定义的验证我使用must验证,可让您在谓词传递和返回一个bool测试验证是否是成功的。我试图验证包括检查是否数组中存在的字符串。

这些细节在很大程度上是无关紧要然而,由于只是我需要能够对谓词传递到旁边一个第二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方法。

c# lambda fluentvalidation
1个回答
1
投票

无论你想这样的:

    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方法来接收和做

© www.soinside.com 2019 - 2024. All rights reserved.