在函数参数中使用多个谓词?

Cri*_*van 1 c# predicate list

我有一个类,用查询字符串参数构建一个URL,依此类推.该类有一个方法:Url()返回由类属性和另一个方法组成的完整url:UrlNew()允许传递谓词作为参数替换其中一个属性的值,然后返回修改后的URL .现在,我需要修改此函数以使用两个谓词的两个参数.我怎么做?我尝试将方法的参数修改为谓词列表,但我可能没有做正确的事情:

我的OLD UrlNew()方法看起来像这样:

public static string Url() (Action<LGUrlBuilder> predicate)
    {
        var instance = new LGUrlBuilder();
        if (predicate != null) predicate(instance);
        return instance.BuildUrl();
    }
Run Code Online (Sandbox Code Playgroud)

我的新UrlNew()方法如下所示:

public static string UrlNew(List<Action<LGUrlBuilder>> predicateList)
    {
        var instance = new LGUrlBuilder();
        if (predicateList != null && predicateList.Count > 0)
        {
            foreach (Action<LGUrlBuilder> predicate in predicateList)
            {
                if (predicate != null) predicate(instance);
            }
        }

        return instance.BuildUrl();
    }
Run Code Online (Sandbox Code Playgroud)

编译得很好但是当我运行它时,在ASPX中使用它会给我这个错误:

CS1660: Cannot convert lambda expression to type 'System.Collections.Generic.List<System.Action<public_site.Library.LG.LGUrlBuilder>>' because it is not a delegate type
Run Code Online (Sandbox Code Playgroud)

我是C#初学者,我确信我做的事情完全错了.任何建议都会有帮助.谢谢!

Meh*_*ari 5

不要修改功能本身.像这样修改方法调用:

UrlNew(x => { func1(x); func2(x); });
Run Code Online (Sandbox Code Playgroud)

但是如果你真的想要将任意数量的委托实例作为参数,请尝试修改它:

public static void UrlNew(params Action<LGUrlBuilder>[] list) {
    // ... do what you're already doing in the second snippet ...
}
Run Code Online (Sandbox Code Playgroud)

你可以这样称呼它:

UrlNew(x => firstthing(), x => secondthing(x), thirdthing);
Run Code Online (Sandbox Code Playgroud)

旁注:An Action<T>不称为谓词.谓词返回一个布尔值.