В существующих ответах говорится об этом как о функции C# 6 без компонента .NET framework.
Это полностью относится к nameof
- но только несколько true для интерполяции строк.
Строка интерполяция будет использовать 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
}
}
Очевидно, что это не будет работать, если просто вызывается вызов string.Format
... вместо этого, в данном случае она вызывает string.Format
в заявлении, присваивающей к local
и вызывает FormattableStringFactory.Create
в заявлении, присваивающей к invariant
и вызывает FormattableString.Invariant
на результат. Если вы попытаетесь скомпилировать это с более ранней версией фреймворка, FormattableString
не будет существовать, поэтому он не будет компилироваться. Вы можете предоставить свою собственную реализацию FormattableString
и FormattableStringFactory
, если вы действительно этого хотите, и компилятор будет использовать их соответствующим образом.
См. [Распутывание версий] (http://csharpindepth.com/Articles/Chapter1/Versions.aspx) от Jon Skeet. Хотя он не распространяется на C# 6.0, но концепция такая же. – Habib