1

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

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

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

我的新 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();
    }

这编译得很好,但是当我运行它时,在 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

我是 C# 初学者,我确信我做错了什么。任何建议都会有所帮助。谢谢!

4

2 回答 2

5

不要修改函数本身。修改方法调用如下:

UrlNew(x => { func1(x); func2(x); });

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

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

你可以这样称呼它:

UrlNew(x => firstthing(), x => secondthing(x), thirdthing);

旁注: AnAction<T>不称为谓词。谓词返回一个布尔值。

于 2009-10-11T16:58:39.953 回答
0

如何使用Action<T1,T2>接受 2 个参数的重载委托。如果您希望使用一个需要布尔返回值的谓词,请Func<T1,T2,bool>改用。

于 2009-10-11T17:03:21.083 回答