我创建了一个示例项目,使用C#6.0好东西 - 以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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着我可以将C#6.0功能用于我的面向.NET 4.0的软件?有任何限制或缺点吗?
阅读以下内容后:
在我看来,除了String Interpolation,我在VS2015中针对.NET 4.51编译的任何项目都可以使用新的C#语言功能.
但是我使用VS2015定位4.51在我的开发机器上尝试了以下代码:
string varOne = "aaa";
string varTwo = $"{varOne}";
if (varTwo == "aaa")
{
}
Run Code Online (Sandbox Code Playgroud)
并且我不仅没有收到编译器错误,它的工作原理是varTwo 包含aaa,如预期的那样.
有人可以解释为什么会这样,因为我不希望这个工作吗?我猜我错过了FormattableString的真正含义.有人能举个例子吗?