在 .VS 2015 NET 4.5 中使用字符串插值和 nameof
Using string interpolation and nameof in .VS 2015 NET 4.5
我在我的代码中使用了 $"hello {person}"
和 nameof(arg1)
之类的东西,但是在检查项目属性时我的目标是 .NET 4.5。
这样可以吗?我以为这些东西是4.6引入的
该项目在我的机器上构建和运行良好 - 但我担心部署它时会出现问题。
这是编译器功能,不是框架功能。我们在 Visual Studio 2015 年的 .NET 3.5 项目中成功地使用了这两个功能。
简而言之,编译器将$"hello {person}"
翻译成String.Format("hello {0}", person)
,将nameof(arg1)
翻译成"arg1"
。这只是语法糖。
运行时看到一个 String.Format
调用(或字符串文字 "arg1")并且不知道(也不关心)原始源代码是什么样的。 String.Format
从早期的 .NET Framework 开始就受到支持,因此没有什么能阻止您以该框架的早期版本为目标。
这些东西是在 C#6
中介绍的。 .Net
与此无关。因此,只要您使用 C#6 编译器,就可以使用这些功能。
What is the difference between C# and .NET?
所以是的,可以在针对 .Net 4.5 的项目中使用它们。
现有答案谈到这是一个没有 .NET 框架组件的 C# 6 功能。
这完全适用于 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
的调用,这将不起作用...相反,在这种情况下,它在分配给 [=17 的语句中调用 string.Format
=],并对结果调用 FormattableStringFactory.Create
in the statement assigning to invariant
, and calls FormattableString.Invariant
。如果您尝试针对框架的早期版本进行编译,FormattableString
将不存在,因此无法编译。不过,如果您真的愿意,可以提供自己的 FormattableString
和 FormattableStringFactory
实现,编译器会适当地使用它们。
我在我的代码中使用了 $"hello {person}"
和 nameof(arg1)
之类的东西,但是在检查项目属性时我的目标是 .NET 4.5。
这样可以吗?我以为这些东西是4.6引入的
该项目在我的机器上构建和运行良好 - 但我担心部署它时会出现问题。
这是编译器功能,不是框架功能。我们在 Visual Studio 2015 年的 .NET 3.5 项目中成功地使用了这两个功能。
简而言之,编译器将$"hello {person}"
翻译成String.Format("hello {0}", person)
,将nameof(arg1)
翻译成"arg1"
。这只是语法糖。
运行时看到一个 String.Format
调用(或字符串文字 "arg1")并且不知道(也不关心)原始源代码是什么样的。 String.Format
从早期的 .NET Framework 开始就受到支持,因此没有什么能阻止您以该框架的早期版本为目标。
这些东西是在 C#6
中介绍的。 .Net
与此无关。因此,只要您使用 C#6 编译器,就可以使用这些功能。
What is the difference between C# and .NET?
所以是的,可以在针对 .Net 4.5 的项目中使用它们。
现有答案谈到这是一个没有 .NET 框架组件的 C# 6 功能。
这完全适用于 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
的调用,这将不起作用...相反,在这种情况下,它在分配给 [=17 的语句中调用 string.Format
=],并对结果调用 FormattableStringFactory.Create
in the statement assigning to invariant
, and calls FormattableString.Invariant
。如果您尝试针对框架的早期版本进行编译,FormattableString
将不存在,因此无法编译。不过,如果您真的愿意,可以提供自己的 FormattableString
和 FormattableStringFactory
实现,编译器会适当地使用它们。