gpt4 book ai didi

c# - c# - 如何将函数传递给具有不同参数的函数并执行它

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:13 26 4
gpt4 key购买 nike

我有一个 C# 应用。

我有几个不同的函数,它们具有不同的返回类型和传递给每个函数的不同参数。

我知道我可以做到:

public object RunTheMethod(Func<string, int> myMethodName)
{
//... do stuff
int i = myMethodName("My String");
//... do more stuff
return true;
}

但我可能有 2 个函数要传递。

第一个函数如本例所示。它接受一个字符串并返回一个 int。但是,如果我想传递一个对象或根本不传递任何参数等等怎么办?

请问这里的通用选项是什么。

谢谢

@人物我在这里有很多好的建议。这就是我喜欢这个网站的原因。我需要让自己冷静下来,喝杯茶,仔细阅读这些建议。

我保证我会回复。

谢谢大家!

最佳答案

一个选择是让函数参数没有参数:

public bool RunTheMethod(Func<int> f)
{
//... do stuff
int i = f();
//... do more stuff
return true;
}

然后,当调用 RunTheMethod 时,您可以在 lambda 表达式中捕获其他参数,如下所示:

var b1 = RunTheMethod(() => theFunctionThatTakesAString("foo"));
var b2 = RunTheMethod(() => theFunctionThatTakesTwoIntegers(42, 1337));

如果你想改变输出类型,你可以制作RunTheMethod泛型本身,像这样:

public bool RunTheMethod<T>(Func<T> f)
{
//... do stuff
T x = f();
//... do more stuff
return true;
}

然而,在这一点上,输入参数是一个函数是否真的有意义是个问题。我注意到这个问题被标记为函数式编程;在 FP 中,一个更惯用的设计是简单地让方法采用一个值:

public bool RunTheMethod<T>(T x)
{
//... do stuff
// no need to call a function to get x; you already have x
//... do more stuff
return true;
}

然后,调用方法(或函数)也变得更容易:

var b1 = RunTheMethod(theFunctionThatTakesAString("foo"));
var b2 = RunTheMethod(theFunctionThatTakesTwoIntegers(42, 1337));

如果您需要该值是一个函数,因为您希望能够控制它何时被评估,请考虑使用 Lazy<T>相反。

关于c# - c# - 如何将函数传递给具有不同参数的函数并执行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48308634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com