簡體   English   中英

表情體VS塊體

[英]Expression Body VS Block Body

在編碼時,出現了差異。 通常在編寫簡單方法或構造函數時,我經常使用表達體技術。 但是,當我生成以下內容時:

public class Sample : ISample
{
     private readonly IConfigurationRoot configuration;

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

代碼似乎是有效的,Visual Studio和編譯都工作。 問題雖然來自同一個類,我去使用configuration變量。 它產生“字段初始值設定項不能引用非靜態字段初始值設定項”。

產生的語法用法:

var example = configuration.GetSection("Settings:Key").Value;

但是,如果我將片段留在此上方並修改為塊體。 Visual Studio不再嚇壞了,為什么表達體會導致如此特殊的錯誤? 塊體與上面的片段一起正常工作嗎?

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();

我會有一個類的接口,然后從提供程序中拉出來實例化。

ISample sample = ServiceProvider.GetServices<ISample>();
public IConfigurationRoot Configuration { get; } = CreateConfiguration();

你沒有設置屬性,但你正試圖設置它? 這對我來說很奇怪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM