Istniejące odpowiedzi mówią o tym, że jest to funkcja C# 6 bez składnika .NET.
To jest całkowicie prawdziwe z nameof
- ale tylko w pewnym stopniu prawdziwe z interpolacji ciągów.
interpolacja String użyje string.Format
w większości przypadków, ale jeśli używasz .NET 4.6, można również przekonwertować ciąg interpolowana do FormattableString
, co jest przydatne, jeśli chcesz formatowanie niezmienny:
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
}
}
Oczywiście to nie będzie działać, jeśli prostu wywoływana wywołanie string.Format
... zamiast, w tym przypadku nazywa to string.Format
w rachunku przypisanie local
i wzywa FormattableStringFactory.Create
w rachunku przypisanie invariant
i wzywa FormattableString.Invariant
na wynik. Jeśli spróbujesz skompilować to z wcześniejszą wersją frameworka, FormattableString
nie będzie istnieć, więc nie będzie się kompilować. Możesz jednak wprowadzić własną implementację FormattableString
i FormattableStringFactory
, jeśli naprawdę tego chcesz, a kompilator użyje ich odpowiednio.
Zobacz [Rozplątanie wersji] (http://csharpindepth.com/Articles/Chapter1/Versions.aspx) autorstwa Jona Skeeta. Chociaż nie obejmuje C# 6.0, ale koncepcja jest taka sama. – Habib