如何在调用委托时发送用作参数的参数列表

本文关键字:参数 列表 调用 | 更新日期: 2023-09-27 18:00:36

我在asp.net mvc 3应用程序中实现了一个简单的扩展方法,可以使用泛型将对象从会话中拉出:

public static T GetVal<T>(this HttpSessionStateBase Session, string key, Func<T> getValues)
    {
        if (Session[key] == null)
            Session[key] = getValues();
        return (T)Session[key];
    }

如果getValues()不需要任何参数,这将非常有效。

我试图编写一个重载,该重载接受params-object[]args,以便在必要时将参数传递给getValues()函数,但我不知道将这些变量应用于函数的语法是什么。

这可能吗?提前感谢你的建议。

如何在调用委托时发送用作参数的参数列表

我认为不应该这样做——调用者可以用lambda表达式来处理。例如:

int x = session.GetVal<int>("index", () => "something".IndexOf("o"));

在这里,我们捕获了在传递参数"o""something"上调用IndexOf的想法。所有这些都被捕获在一个简单的CCD_ 4中。

您可以为函数添加重载

public static T GetVal<T>(this HttpSessionStateBase Session, string key, Func<IList<object>,T> getValues, IList<object> args)
{
    if (Session[key] == null)
        Session[key] = getValues(args);
    return (T)Session[key];
}

您必须定义自己的委托,而不是Func。以下内容将在此处完美工作:

public delegate TResult ParamsFunc<TResult>(params object[] args);