gpt4 book ai didi

c# - 作为方法参数的函数

转载 作者:行者123 更新时间:2023-11-30 19:49:42 26 4
gpt4 key购买 nike

您可以像在 JavaScript 中一样在 C# 中执行匿名函数:

JavaScript:

var s = (function ()
{
return "Hello World!";
}());

C#:

var s = new Func<String>(() =>
{
return "Hello World!";
})();

... 在 JavaScript 中,您可以传递要由其他函数执行的函数。最重要的是;您可以将参数传递给执行的函数:

var f = function (message) // function to be executed
{
alert(message);
};

function execute(f) // function executing another function
{
f("Hello World!"); // executing f; passing parameter ("message")
}

上面的例子在 C# 中可行吗?


更新

用例:我正在遍历一堆数据库,记录特定实体。我不想调用 LoggerLog() 中的第二个函数 (F()),而是调用 F( ) 课外。

... 类似以下内容:

public void F(String databaseName)
{
}

public class Logger
{
public void Log(Function f)
{
var databaseName = "";

f(databaseName);
}
}

最佳答案

当然 - 您只需要为该方法提供适当的签名:

public void Execute(Action<string> action)
{
action("Hello world");
}
...
Execute(x => Console.WriteLine(x));

请注意,您必须在参数中指定特定的委托(delegate)类型 - 您不能只将其声明为 Delegate例如。

编辑:您的数据库示例与此完全相同 - 您想要传入一个字符串而不获取任何输出,这正是 Action<string> 的内容做。除非您尝试调用现有方法(代码中的 F()),否则您甚至不需要 lambda 表达式 - 您可以改用方法组转换:

public void F(String databaseName)
{
}

public class Logger
{
public void Log(Action<string> f)
{
var databaseName = "";

f(databaseName);
}
}

// Call it like this:
Logger logger = new Logger(...);
logger.Log(F);

关于c# - 作为方法参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3546109/

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