首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用C#作为参数传递方法?

使用C#作为参数传递方法?

提问于 2017-12-19 05:47:41
回答 2关注 0查看 296

我有几个方法都具有相同的签名(参数和返回值),但不同的名称和方法的内部是不同的。我想传递该方法的名称运行到另一个方法,将调用传入的方法。

代码语言:txt
AI代码解释
复制
public int Method1(string)
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    ... do something
代码语言:txt
AI代码解释
复制
    return myInt;
代码语言:txt
AI代码解释
复制
}
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
public int Method2(string)
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    ... do something different
代码语言:txt
AI代码解释
复制
    return myInt;
代码语言:txt
AI代码解释
复制
}
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
public bool RunTheMethod([Method Name passed in here] myMethodName)
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    ... do stuff
代码语言:txt
AI代码解释
复制
    int i = myMethodName("My String");
代码语言:txt
AI代码解释
复制
    ... do more stuff
代码语言:txt
AI代码解释
复制
    return true;
代码语言:txt
AI代码解释
复制
}
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
public bool Test()
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    return RunTheMethod(Method1);
代码语言:txt
AI代码解释
复制
}

此代码不起作用,但这是我想要做的。我不明白的是如何编写RunTheMethod代码,因为我需要定义参数。

回答 2

不知雨

发布于 2017-12-19 06:08:50

你需要使用一个委托。在这种情况下,你所有的方法都带一个string参数,并返回一个int- 这个代表最简单的Func<string, int>代表1。所以你的代码可以通过这样简单的改变而变得正确:

代码语言:txt
AI代码解释
复制
public bool RunTheMethod(Func<string, int> myMethodName)
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    // ... do stuff
代码语言:txt
AI代码解释
复制
    int i = myMethodName("My String");
代码语言:txt
AI代码解释
复制
    // ... do more stuff
代码语言:txt
AI代码解释
复制
    return true;
代码语言:txt
AI代码解释
复制
}

诚然,代表们有比这更多的权力。例如,用C#可以从lambda表达式创建一个委托,所以你可以这样调用你的方法:

代码语言:txt
AI代码解释
复制
RunTheMethod(x => x.Length);

这将创建一个这样的匿名函数:

代码语言:txt
AI代码解释
复制
// The <> in the name make it "unspeakable" - you can't refer to this method directly
代码语言:txt
AI代码解释
复制
// in your own code.
代码语言:txt
AI代码解释
复制
private static int <>_HiddenMethod_<>(string x)
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    return x.Length;
代码语言:txt
AI代码解释
复制
}

然后将该委托传递给该RunTheMethod方法。

您可以使用委托进行事件订阅,异步执行,回调 - 各种各样的事情。非常值得一读,特别是如果你想使用LINQ。我有一个文章是大多是关于委托和事件之间的差异,但你会发现它很有用呢。

1这只是基于Func<T, TResult>框架中的通用委托类型; 你可以轻松地声明自己的:

代码语言:txt
AI代码解释
复制
public delegate int MyDelegateType(string value)

然后使该参数成为类型MyDelegateType。

akjok54

发布于 2017-12-19 06:08:18

你可以使用.net 3.5中的Func委托作为RunTheMethod方法中的参数。Func委托允许你指定一个方法,该方法需要一些特定类型的参数并返回一个特定类型的单个参数。这是一个应该工作的例子:

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
public class Class1
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    public int Method1(string input)
代码语言:txt
AI代码解释
复制
    {
代码语言:txt
AI代码解释
复制
        //... do something
代码语言:txt
AI代码解释
复制
        return 0;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    public int Method2(string input)
代码语言:txt
AI代码解释
复制
    {
代码语言:txt
AI代码解释
复制
        //... do something different
代码语言:txt
AI代码解释
复制
        return 1;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    public bool RunTheMethod(Func<string, int> myMethodName)
代码语言:txt
AI代码解释
复制
    {
代码语言:txt
AI代码解释
复制
        //... do stuff
代码语言:txt
AI代码解释
复制
        int i = myMethodName("My String");
代码语言:txt
AI代码解释
复制
        //... do more stuff
代码语言:txt
AI代码解释
复制
        return true;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    public bool Test()
代码语言:txt
AI代码解释
复制
    {
代码语言:txt
AI代码解释
复制
        return RunTheMethod(Method1);
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}
和开发者交流更多问题细节吧,去 写回答
相关文章
Python 函数作为参数传递
#map()的功能是将函数对象依次作用于表的每一个元素,每次作用的结果储存于返回的表re中。 #map通过读入的函数(这里是lambda函数)来操作数据 def test_func_map():     re = map((lambda x: x+3), [1, 2, 3, 4])     print re def testA(a, b, **kargs):     print a+b     print "testA: %s" % kargs #函数作为参数传递 def test_func(func, a, b, **kargs):     func(a, b)     print "test_func: %s" % kargs #函数作为参数传递 def test_func_lambda(func, **kargs):     func()     print "test_func_lambda: %s" % kargs def test_func_getattr():     func = getattr(obj, "testA")     func(1, 2) class TestGetattr():     aa = "2a"     def get_attr(self):         print "test getattr()"     def print_text(self):         print "print text"     def print_string(self):         print "print string" #getattr(obj, "a")的作用和obj.a是一致的,但该方法还有其他的用处,最方便的就是用来实现工厂方法 #根据传入参数不同,调用不同的函数实现几种格式的输出 def output(print_type="text"):     tg = TestGetattr()     output_func = getattr(tg, "print_%s" % print_type)     output_func() if __name__ == "__main__":     #test_func(testA, 1, 2, aa="aa")     #test_func_lambda((lambda: testA(1, 2, bb="bb")), cc="cc")     #test_func_map()     #test_func_getattr()     #getattr方法,传入参数是对象和该对象的函数或者属性的名字,返回对象的函数或者属性实例     obj = TestGetattr()     func = getattr(obj, "get_attr") #getattr()获得对象的属性和方法     func()     print getattr(obj, "aa") #完成对象的反射     print obj.aa     #callable方法,如果传入的参数是可以调用的函数,则返回true,否则返回false。     print callable(getattr(obj, "aa"))     output("string")
py3study
2020/01/09
3.4K0
Go-函数作为参数传递
编码过程中业务需要将一个函数,作为参数传递到函数内部。Go 语言的匿名函数是一个闭包(Closure)
王小明_HIT
2023/03/01
2K0
Go-函数作为参数传递
linux/bash:map作为参数传递给function
在linux bash中map是作为数组处理的,不能作为参数直接传递函数,如果一定要传递给函数,要做一些变通处理,示例如下:
10km
2019/08/14
2.9K0
【Python】函数进阶 ③ ( 函数作为参数传递 )
之前介绍的函数 , 都是 接收具体的 变量 或 字面量 数据 作为参数 , 如 : 数字 / 布尔值 / 字典 / 列表 / 元组 等 ;
韩曙亮
2023/10/11
8580
【Python】函数进阶 ③ ( 函数作为参数传递 )
方法中参数传递
这种方式复制参数的内存位置的引用给形式参数。这意味着,当形参的值发生改变时,同时也改变实参的值。
wfaceboss
2019/04/08
2.1K0
JS处理函数将对象作为参数传递
做项目的时候遇到一个不是很常见的问题,就是js函数传递参数的时候,我们一般是传递一个数字或者是一个字符串,但是当你的需求满足不了的时候,就需要将对象或者数组作为一个参数传递过去,这个时候怎么做呢,今天简单的说有一下:
何处锦绣不灰堆
2020/05/29
7.8K0
C++返回vector/将vector作为参数传递
在C++里很多时候我们会遇到函数想返回两个以上结果的情况,这时候可以用数组(vector)、类来作为容器返回,也可以声明一个全局变量的数组,将数值存放在数组里解决。
vincentbbli
2021/08/18
5.9K0
java之方法的参数传递(值传递和引用传递)
基础数据类型参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响;
西西嘛呦
2020/08/26
2.4K0
React 使用Context传递参数
在使用React时,很容易在自定义的React组件之间跟踪数据流。当监控一个组件时,可以监控到那些props被传递进入组件了,这非常有利于了解数据流在什么地方出现了问题。
随风溜达的向日葵
2018/08/09
1.8K0
解析EasyGBS兼容token作为参数传递的实现方式
我们在此前的文章中也详细介绍过关于TSINGSEE青犀视频Easy系列平台token机制的运用(流媒体服务器Easy系列视频平台中token机制全解)。Easy系列视频平台都采用了token机制,使用Token的目的是为了减轻服务器的压力,减少服务器频繁查询数据库的次数,使服务器更加稳固。
TSINGSEE青犀视频
2022/01/20
2.2K0
SOLIDITY REMIX方法传递数组参数
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序新视界
2019/09/18
2.6K0
SOLIDITY REMIX方法传递数组参数
golang-101-hacks(12)——切片作为函数参数传递
注:本文是对golang-101-hacks中文翻译。 在Go语言中,函数参数是值传递。使用slice作为函数参数时,函数获取到的是slice的副本:一个指针,指向底层数组的起始地址,同时带有slice的长度和容量。既然各位熟知数据存储的内存的地址,现在可以对切片数据进行修改。让我们看看下面的例子: In Go, the function parameters are passed by value. With respect to use slice as a function argument, that means the function will get the copies of the slice: a pointer which points to the starting address of the underlying array, accompanied by the length and capacity of the slice. Oh boy! Since you know the address of the memory which is used to store the data, you can tweak the slice now. Let's see the following example:
羊羽shine
2019/06/05
1.4K0
如何在C中传递二维数组作为参数?
在C语言中,有很多方法可以将2d数组作为参数传递。在下面的部分中,我描述了将2d数组作为参数传递给函数的几种方法。
用户4645519
2020/09/08
3.7K0
策略模式:使用参数对象传递参数
以下是一个使用参数对象的策略模式的例子,该例子中,我们将创建两种不同的支付策略,它们需要不同的参数:
运维开发王义杰
2023/08/16
3770
策略模式:使用参数对象传递参数
java中方法的参数传递机制
swap方法中,a b 向 x y 传递的是值,是 a b 在栈中的值,此处的 传递=拷贝
code-x
2022/06/21
8520
【字节跳动面试题】C++指针作为参数传递
调用函数verifyPointerArgumentOfFunction时,num将其数组首元素的地址传入,赋值给p,调用了p的拷贝构造函数,因此p的值和num其数组首元素的地址相同。而p作为verifyPointerArgumentOfFunction函数栈中的局部变量,其地址为0x7ffee72bfae0。
用户7257200
2020/05/15
1K0
python函数可以按照参数名称方式传递参数_python字符串作为函数参数
函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。
全栈程序员站长
2022/09/27
2.3K0
python函数可以按照参数名称方式传递参数_python字符串作为函数参数
C# 方法与参数 常见命名空间汇总 using的使用 main方法参数
本文主要讲 C# 常见命名空间 using static 指令 && 调用静态方法 嵌套命名空间&&作用域 别名 Main() 方法 ---- C# 常见命名空间 命名空间 作用 System 创建文件是默认引入,处理数学计算、、环境变量、输出控制台、垃圾回收器及一些常见的异常和特征。 System.Collections 同:都是处理对象集合(列表和字典等) 异:后者是使用 泛型的强类型集合 System.Collections.Generic  System.Dat
痴者工良
2021/04/26
1.5K0
辨析Java方法参数中的值传递和引用传递
小瓜瓜作为一个Java初学者,今天跟我说她想通过一个Java方法,将外部变量通过参数传递到方法中去,进行逻辑处理,方法执行完毕之后,再对修改过的变量进行判断处理,代码如下所示。
翎野君
2023/05/12
2K0
辨析Java方法参数中的值传递和引用传递
点击加载更多

相似问题

如何在C中传递一个函数作为参数?

2877

request参数传递?

1182

ansible怎么获得客户机ip地址并作为参数传递给脚本?

0971

如何在C#中使用可选参数?

2276

如何在C#中使用同步方法调用异步方法?

2622
相关问答用户
某公司 | 程序员擅长1个领域
腾讯云TDP | 先锋会员擅长2个领域
擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档