首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# -向委托传递参数并提取它

C# -向委托传递参数并提取它
EN

Stack Overflow用户
提问于 2013-05-12 17:09:03
回答 5查看 158关注 0票数 2

我有以下委派情况:

代码语言:javascript
复制
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之前做一些逻辑,在逻辑之后做method.Invoke。

有可能吗?我是不是漏掉了什么?谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-05-12 17:58:24

这足以提供所需的输出:

代码语言:javascript
复制
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";
}
票数 1
EN

Stack Overflow用户

发布于 2013-05-12 17:28:07

让我们来分析一下。

您的Func Func<string, T>方法需要一个接受string参数并返回T的函数。

当您使用x => MethodToInvoke(myVal)初始化Func<string, T>时,您会说:

这里有一个函数,它有一个名为x的参数,它是通过调用MethodToInvoke(myVal)实现的,返回类型是MethodToInvoke()返回的任何类型。

尽管该函数有一个名为x的参数,但实际上并没有在=>的右侧使用它,因为您使用的是myVal

要解决这个问题,可以像这样使用x (还要添加myVal作为额外的参数):

代码语言:javascript
复制
Step(x => MethodToInvoke(x), myVal);

它可以简化为:

代码语言:javascript
复制
Step(MethodToInvoke, myVal);

然后,您需要更改Step()方法,以获取额外的字符串参数,并将其传递给函数,该函数也将传递给Step():

代码语言:javascript
复制
T Step<T>(Func<string, T> method, string str)
{
    return method.Invoke(str);
}

它也可以简化为:

代码语言:javascript
复制
T Step<T>(Func<string, T> method, string str)
{
    return method(str);
}
票数 2
EN

Stack Overflow用户

发布于 2013-05-12 17:17:34

这些字符串尚未发送到Step方法。它只被发送到Step方法的λ表达式使用,而λ表达式忽略了输入变量,所以如果您在调用字符串之前对它做了任何操作,它也不会有任何帮助,它仍然会使用原始字符串并忽略您发送给它的内容。

首先让lambda表达式使用输入参数而不是变量,然后将字符串发送到Step方法:

代码语言:javascript
复制
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表达式,你只需要对这个方法进行委托就可以了:

代码语言:javascript
复制
Step(MethodToInvoke, "test");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16505805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档