我创建了一个带有C#6.0好东西的示例项目-以零传播和属性初始化为例,设置目标版本.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); } }
这是否意味着我可以针对针对.NET 4.0的软件使用C#6.0功能?有任何限制或缺点吗?
是的(大部分)。C#6.0需要新的Roslyn编译器,但是新的编译器可以针对较旧的框架版本进行编译。仅限于 不需要框架支持的 新功能。
例如,虽然您可以将C#6.0中的字符串插值功能与.Net的早期版本结合使用(因为它会导致对的调用string.Format):
string.Format
int i = 3; string s = $"{i}";
您需要.Net 4.6才能使用它,IFormattable因为仅新的框架版本添加了以下内容System.FormattableString:
IFormattable
System.FormattableString
int i = 3; IFormattable s = $"{i}";
您提到的案例不需要框架中的类型即可工作。因此,编译器完全能够为旧框架版本支持这些功能。