如何在调用委托时发送用作参数的参数列表
本文关键字:参数 列表 调用 | 更新日期: 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);