gpt4 book ai didi

c# - 表达式体 VS block 体

转载 作者:太空狗 更新时间:2023-10-29 22:01:58 27 4
gpt4 key购买 nike

在编码时,出现了差异。通常在编写简单的方法或构造函数时,我经常使用表达式体技术。但是,当我产生以下内容时:

public class Sample : ISample
{
private readonly IConfigurationRoot configuration;

public Sample(IConfigurationRoot configuration) => this.configuration = configuration;
}

代码似乎是有效的,Visual Studio 和 compile 都可以工作。如果在同一个类中,问题就会出现,我去使用 configuration多变的。它产生“字段初始值设定项不能引用非静态字段初始值设定项”。

产生的语法用法:
var example = configuration.GetSection("Settings:Key").Value;

但是,如果我将代码段留在上面并修改为块体。 Visual Studio 不再 panic ,为什么表达式体会导致如此奇特的错误?虽然块体与上面的代码片段一起正常工作?
public class Sample : ISample
{
private readonly IConfigurationRoot configuration;

public Sample(IConfigurationRoot configuration)
{
this.configuration = configuration;
}
}
public class ApplicationProvider
{
public IConfigurationRoot Configuration { get; } = CreateConfiguration();

public IServiceProvider BuildProvider()
{
var services = new ServiceCollection();
DependencyRegistration(services);

return services.AddLogging().BuildServiceProvider();
}

private IConfigurationRoot CreateConfiguration() => new ConfigurationBuilder()
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();

private void DependencyRegistration(this IServiceCollection services)
{
services.AddSingleton(_ => Configuration);
// All other dependency registration would also go here.
}
}

public static IServiceProvider ServiceProvider { get; } = new ApplicationProvider().BuildProvider();

我会有一个类的接口(interface),然后通过从提供者中提取来实例化。
ISample sample = ServiceProvider.GetServices<ISample>();

最佳答案

public IConfigurationRoot Configuration { get; } = CreateConfiguration();

您没有设置属性但您正在尝试设置它?
这对我来说很奇怪。

关于c# - 表达式体 VS block 体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47563490/

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