我有以下授权情况:
string myVal = "test";
Step(x => MethodToInvoke(myVal));
private T Step<T>(Func<string, T> method){
str = ;//Where do I get the string myVal from???
return method.Invoke(str);
}
private string MethodToInvoke(string str){
return str + "_invoked"
}
如何获取已发送的参数的内部方法Step
? (string myVal = "test"
)
我想在method.Invoke
之前制作一些逻辑,然后在逻辑之后执行方法.Invoke。
有可能吗? 我在这里错过了什么吗? 感谢
答案 0 :(得分:2)
让我们打破这一点。
您的Func Func<string, T>
方法需要一个接受string
参数并返回T
的函数。
当您使用Func<string, T>
初始化x => MethodToInvoke(myVal)
时,您说:
“这是一个带有x
参数的函数,它通过调用MethodToInvoke(myVal)
实现,返回类型是MethodToInvoke()
返回的任何类型。”
虽然该函数有一个名为x
的参数,但您实际上并没有在=>
的右侧使用它,因为您使用的是myVal
。
要解决此问题,请使用x
之类的内容(并添加myVal
作为额外参数):
Step(x => MethodToInvoke(x), myVal);
可以简化为:
Step(MethodToInvoke, myVal);
然后,您需要更改Step()
方法以获取其他字符串参数,并将其传递给也传递给Step()的Func:
T Step<T>(Func<string, T> method, string str)
{
return method.Invoke(str);
}
也可以简化为:
T Step<T>(Func<string, T> method, string str)
{
return method(str);
}
答案 1 :(得分:1)
这足以提供所需的输出:
string myVal = "test";
Step(x => MethodToInvoke(x), myVal);
private T Step<T>(Func<string, T> method, string str)
{
return method.Invoke(str);
}
private string MethodToInvoke(string str)
{
return str + "_invoked";
}
答案 2 :(得分:0)
尚未将字符串发送到Step
方法。它只被发送到Step
方法的lambda表达式使用,并且lambda表达式忽略了输入变量,因此如果你在调用它之前对字符串做任何事情它将无济于事,它仍将使用原始字符串并忽略您发送给它的内容。
首先使lambda表达式使用输入参数而不是变量,然后将字符串发送到Step
方法:
Step(x => MethodToInvoke(x), "test");
private T Step<T>(Func<string, T> method, string value){
str = value; // do whatever you like with the string
return method(str);
}
好吧,因为MethodToInvoke
方法已经使用了输入参数,你根本不需要lambda表达式,你只需要从方法中创建一个委托:
Step(MethodToInvoke, "test");
答案 3 :(得分:0)
我认为您想要的是以下内容:
string myVal = "test";
Step(myVal, x => methodToInvoke(x));
private T Step<T>(string myVal, Func<string, T> method){
str = myVal;//Where do I get the string myVal from???
return method.Invoke(str);
}
private string MethodToInvoke(string str){
return str + "_invoked"
}
您需要将myVal变量传递给Step方法,然后在StepMethod中将其传递给您的Func。
答案 4 :(得分:0)
您指定的lambda表达式,只是访问myVal。如果要将带参数的委托传递给方法,请执行以下操作:
public void foo(Func<string, int> myFunc, string arg)
{
int result = myFunc(arg);
}