gpt4 book ai didi

C# 使用 lambda 表达式将参数传递给方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:18 25 4
gpt4 key购买 nike

任何使用过 ASP.Net 的人都可能见过接受 Action<T> 的方法用于配置某些选项的委托(delegate)。以 ASP.Net Core MVC Startup.cs 中的这个为例。

public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication().AddJwtBearer(options => {
options.Audience = "something";
// ...
});

//...
}

.AddJwtBearer()方法采用 Action<T>委托(delegate) 在 lambda 表达式中配置参数,我想做的是在我的一个项目中复制它,但没有成功。我得到了 Method(Action<T> action)部分下来,但我似乎无法检索调用该方法时配置的结果对象。

上下文的一些代码:

构建器类方法:

public ReporterBuilder SetEmail(Action<EmailConfig> config)
{
if (config is null)
throw new ArgumentNullException();

// Get configured EmailConfig somehow...

return this;
}

EmailConfig 模型:

public class EmailConfig
{
public EmailProvider EmailProvider { get; set; }
public string Host { get; set; }
public int Port { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string FromAddress { get; set; }
public string ToAddress { get; set; }
}

所以我想在这里实现的是:

Reporter reporter = new ReporterBuilder()
.SetEmail(config => {
config.EmailProvider = EmailProvider.Other;
config.Host = "something";
// ...
})
.Build();

我查看了 GitHub 上的一些 Microsoft 存储库(aspnet/DependencyInjection、aspnet/Options 被视为将这种方法与 IoC 容器一起使用的两个主要存储库),了解它们如何从 Action<T> 中获取值代表,绝对没有运气。

在 Internet 上搜索几个小时也无济于事,因为大多数文章都已过时或与我正在尝试做的事情无关。

非常欢迎任何有关我如何完成这项工作的帮助,也欢迎就更好的方法提出建议。

最佳答案

您的方法需要实例化对象,然后调用方法,将对象传递给方法。 Func<T>会返回一个对象。这是 ActionT<T> ,它不返回任何东西。相反,它接受对象。

public ReporterBuilder SetEmail(Action<EmailConfig> config)
{
if (config == null)
throw new ArgumentNullException();

var cfg = new EmailConfig();

// optionally populate the cfg with
// default configuration before calling method

config(cfg);

// cfg contains your configuration
// and is full of that thing called 'love'

return this;
}

关于C# 使用 lambda 表达式将参数传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911110/

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