【问题标题】:C#6 expression in .net framework 4.net 框架 4 中的 C#6 表达式
【发布时间】:2016-03-14 17:38:49
【问题描述】:

我有这个 C# 6 表达式

private int ProxyQueueTimeoutMs => ((MultiProxyCrawlConfiguration) _config).ProxyQueueTimeoutMs;

在 C#6 之前是否存在 C# 的等价物? 是否可以在.net framework 4 等旧版本中编写类似的方法?

【问题讨论】:

  • 那 (Expression-bodied function members) 不绑定到任何版本的 .NET 框架。它只是一个编译器/Visual Studio 语言功能。您使用的是什么版本的 Visual Studio?
  • 我使用 Visual Studio 2013。
  • Visual Studio 2013 使用 C#5 编译器。该功能不可用。
  • 仅供参考,对 .NET 4.0 的支持将于 2016 年 1 月 12 日结束。与其寻找解决方法,不如升级到 4.5.2

标签: c# c#-4.0 c#-6.0


【解决方案1】:

此语法称为Expression-bodied function members。它相当于调用ProxyQueueTimeoutMs 属性,并在=> 部分之后返回一个getter;

private int ProxyQueueTimeoutMs
{
   get 
   { 
       return ((MultiProxyCrawlConfiguration) _config).ProxyQueueTimeoutMs;
   }
}

【讨论】:

  • 我可以在面向 .Net framework 4.0 的旧应用程序中使用表达式体函数成员吗?
【解决方案2】:

在 C# 6 之前,你可以这样做

private int ProxyQueueTimeoutMs
{
    get
    {
        return ((MultiProxyCrawlConfiguration) _config).ProxyQueueTimeoutMs;
    }
}

您可以在任何 .NET 版本中编写 C# 6,因为 C# 由编译器处理,而不是由 .NET Framework 版本处理。

【讨论】:

    【解决方案3】:

    您可以在项目中包含Microsoft.Net.Compilers NuGet 包,它将替换使用的 C# 编译器,以便您可以针对 C#6.0。

    https://www.nuget.org/packages/Microsoft.Net.Compilers/

    这应该使您能够将 C#6.0 与 .NET 4 一起使用。我已经将它用于 .NET 4.5

    【讨论】:

      【解决方案4】:

      这是一个私有的只读属性,使用新的 C# 6 表达式体属性语法定义。

      C#早期版本的等效代码是

      private int ProxyQueueTimeoutMs
      {
          get
          {
              return ((MultiProxyCrawlConfiguration)_config).ProxyQueueTimeoutMs;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-11
        • 1970-01-01
        • 1970-01-01
        • 2019-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多