当前位置:  开发笔记 > 编程语言 > 正文

传递函数(带参数)作为参数?

如何解决《传递函数(带参数)作为参数?》经验,为你挑选了2个好方法。

我想创建一个泛型,我可以将一个函数作为参数传递给我,但是这个函数可能包含参数本身......

int foo = GetCachedValue("LastFoo", methodToGetFoo)

这样:

protected int methodToGetFoo(DateTime today)
{ return 2; // example only }

本质上我想要一个方法来检查缓存的值,否则将根据传入的方法生成值.

思考?



1> Marc Gravell..:

听起来你想要一个Func:

T GetCachedValue(string key, Func method) {
     T value;
     if(!cache.TryGetValue(key, out value)) {
         value = method();
         cache[key] = value;
     }
     return value;
}

然后呼叫者可以通过多种方式将其包裹起来; 对于简单的功能:

int i = GetCachedValue("Foo", GetNextValue);
...
int GetNextValue() {...}

或涉及参数的地方,一个闭包:

var bar = ...
int i = GetCachedValue("Foo", () => GetNextValue(bar));


在这里真的很老,但关闭部分正是我正在寻找的

2> 小智..:

使用System.Action和lambda表达式(anonimous方法).例如

    public void myMethod(int integer){

    //Do something

}

public void passFunction(System.Action methodWithParameters){

    //Invoke
    methodWithParameters();

}

//...

//Pass anonimous method using lambda expression
passFunction(() => myMethod(1234));

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有