我创建了一个示例项目,以C#6.0 goodies-null传播和属性初始化为例,设置目标版本.NET 4.0和它...作品

public class Cat
{
    public int TailLength { get; set; } = 4;

    public Cat Friend { get; set; }

    public string Mew() { return "Mew!"; }
}

class Program
{
    static void Main(string[] args)
    {
        var cat = new Cat {Friend = new Cat()};
        Console.WriteLine(cat?.Friend.Mew());
        Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null");
        Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0);
    }
}

这是否意味着我可以在面向.NET4.0的软件中使用C#6.0功能?有什么限制或缺点吗?

推荐答案

是的(大部分).C#6.0需要新的Roslyn编译器,但新编译器可以针对较旧的框架版本进行编译.这仅限于don't require support from the framework个新功能.

例如,虽然可以在C#6.0的早期版本中使用字符串插值功能.Net(因为它会导致呼叫string.Format):

int i = 3;
string s = $"{i}";

您需要.Net 4.6才能将其与IFormattable一起使用,因为只有新的框架版本添加了System.FormattableString:

int i = 3;
IFormattable s = $"{i}";

您提到的情况不需要框架中的类型即可工作.因此,编译器完全能够支持旧框架版本的这些功能.

.net相关问答推荐

dotnet 8 web api在部署到docker后无法工作

Msbuild try 构建 msbuild.exe 而不是我的 .csproj 文件

如何手动注入依赖注入

在本地运行 Azure 函数会在 .NET7 升级后出现无运行时错误

如何将 Assembly.CodeBase 转换为 C# 中的文件系统路径?

使用字典作为数据源绑定组合框

maxRequestLength 的最大值?

我什么时候应该在 C# 中使用使用块?

LINQ 性能常见问题解答

如何从 .net 中的数组类型获取数组项类型

调用委托与方法的性能

无法加载文件或程序集'System.ComponentModel.Annotations,版本 = 4.1.0.0

在 ToString() 之前判断 null

.NET 反射的成本是多少?

String.Replace() 与 StringBuilder.Replace()

Microsoft.Bcl.Build NuGet 包有什么作用?

.NET 的 XPath 和 XSLT 2.0?

MVVM 没有意义吗?

MultipleActiveResultSets=True 还是多个连接?

App.config:用户与应用程序范围