【问题标题】:Disadvantages of coding in C#6.0 but compiling against .NET 2.0在 C#6.0 中编码但针对 .NET 2.0 进行编译的缺点
【发布时间】:2016-04-06 14:34:31
【问题描述】:

今天我突然想到了这个问题。

C#6.0 或任何其他版本都引入了很酷的新功能,使代码更容易。

但是假设我有一个运行 WindowsXP 的客户端,它不支持 .NET 4.6。

在 C#6.0(或将来的最新 C# 版本)中编写我的代码但针对 .NET 2.0 框架(或与 C# 不同的其他 .NET 版本)进行编译时,它们有什么缺点吗?发布时使用的版本)

编辑

对于那些不知道的人,您可以通过项目属性 -> 应用程序选项卡 -> 目标框架来定位 .NET Framework

您可以通过项目属性 -> 构建选项卡 -> 高级 -> 语言版本来定位 C# 语言版本。

EDIT2 - C#6.0 代码在 .NET 2.0 上编译并在 WindowsXP 上运行

static void Main(string[] args)
{
    try
    {
        StringBuilder sb = null;
        string value = sb?.ToString();  // C#6 Feature. Wont throw an exception. 

        if(value == null)
        {
            Console.WriteLine("The Value is null");
        }

        string value2 = sb.ToString();  // Will cause an "Object Reference not set to an instance" exception

    }
    catch ( Exception ex) when (ex.Message.Contains("object")) // C#6.0 conditional catches
    {
        Console.WriteLine("Exception Caught");
    }
    catch(Exception ex)
    {
        Console.WriteLine("Other Exception");
    }

    Console.ReadLine();
}

【问题讨论】:

  • @Vladimir 不正确。许多 C# 6.0 功能是编译时的,而 .Net 的版本是运行时的。它只会影响您可以使用的库。
  • @Vladimir 那不是真的。我在我的问题中添加了一些 C#6.0 代码,这些代码在 .net 2.0 上编译和运行

标签: c# .net frameworks c#-6.0


【解决方案1】:

在 C#6.0(或将来的最新 C# 版本)中编写我的代码但针对 .NET 2.0 框架(或与 C# 不同的其他 .NET 版本)进行编译时,它们有什么缺点吗?发布时使用的版本)

只是会有你不能使用的功能:

  • LINQ 除非您提供自己的实现
  • 表达式树
  • 扩展方法,除非您添加自己的属性
  • FormattableString 用于内插字符串(次要;您仍然可以将内插字符串用作字符串)
  • 动态输入
  • 一般差异
  • 来电者信息,除非您添加自己的属性
  • Async/await(不确定提供您自己的实现是否可行……相当重要的工作)

其他功能,如 lambda 表达式、表达式体成员、匿名类型等应该可以正常工作。

【讨论】:

  • 我很好奇,如何通过创建属性来使用.net2.0 编写扩展方法?能给个链接吗?
  • @RenéVogt:基本上如果您在System.Runtime.CompilerServices 命名空间中创建自己的ExtensionAttribute,编译器将使用它。
  • 不过,Windows XP 支持 .net 4,这将使您可以访问上述一些功能
  • @EliPerl Windows XP 只是一个例子。问题实际上是针对不同版本的 .net 框架编译代码。
  • 感谢 Jon,不知道这是一个如此简单的编译器魔法使我们无法在旧项目中使用扩展(需要保持 2.0)。现在我只是不确定复制 linq 扩展的源代码是否合法,或者我们是否必须重新实现它们:)
猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2011-01-17
  • 2011-12-06
相关资源
最近更新 更多