我想创建一个泛型,我可以将一个函数作为参数传递给我,但是这个函数可能包含参数本身......
int foo = GetCachedValue("LastFoo", methodToGetFoo)
这样:
protected int methodToGetFoo(DateTime today) { return 2; // example only }
本质上我想要一个方法来检查缓存的值,否则将根据传入的方法生成值.
思考?
听起来你想要一个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));
使用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));