在.VS 2015 NET 4.5中使用字符串插值和名称
我在我的代码中使用了诸如$"hello {person}"
和nameof(arg1)
,但在检查项目属性时,我的目标是.NET 4.5。
这个可以吗? 我认为这些东西是在4.6中引入的。
该项目在我的机器上构建并运行正常 – 但我担心在部署它时会出现问题。
它是一个编译器function,而不是框架function。 我们在Visual Studio 2015中成功使用了.NET 3.5项目的这两个function。
简而言之,编译器将$"hello {person}"
为String.Format("hello {0}", person)
,将nameof(arg1)
为"arg1"
。 这只是语法糖。
运行时看到一个String.Format
调用(或分别是字符串文字“arg1”),并且不知道(也不关心)原始源代码的样子。 从.NET Framework的早期开始就支持String.Format
,因此没有什么可以阻止您定位早期版本的框架。
现有的答案谈到这是一个没有.NET框架组件的C#6function。
这完全适用于nameof
– 但仅在字符串插值方面有所不同 。
在大多数情况下,字符串插值将使用string.Format
,但如果您使用的是.NET 4.6,它还可以将插值字符串转换为FormattableString
,如果您想要不变格式,这很有用:
using System; using System.Globalization; using static System.FormattableString; class Test { static void Main() { CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR"); double d = 0.5; string local = $"{d}"; string invariant = Invariant($"{d}"); Console.WriteLine(local); // 0,5 Console.WriteLine(invariant); // 0.5 } }
显然,如果$"{d}"
只调用了对string.Format
的调用,那么这将无法工作……相反,在这种情况下,它会在语句中调用string.Format
并分配给local
,并在语句分配中调用FormattableStringFactory.Create
到invariant
,并在结果上调用FormattableString.Invariant
。 如果您尝试针对早期版本的框架编译它, FormattableString
将不存在,因此它将无法编译。 但是,如果您真的想要,可以提供自己的FormattableString
和FormattableStringFactory
实现,编译器将适当地使用它们。
这些东西是在C#6
中介绍的。 .Net
与它无关。 因此,只要您使用C#6编译器 ,就可以使用这些function。
C#和.NET有什么区别?
所以是的, 可以在针对.Net 4.5的项目中使用它们。