Using string interpolation and nameof in .VS 2015 NET 4.5

I'm using things like $"hello {person}" and nameof(arg1) in my code, but on checking the project properties I'm targeting .NET 4.5.

Is this okay? I thought these things were introduced in 4.6.

The project builds and runs okay on my machine - but I'm worried something will go wrong when I deploy it.

Jon Skeet
people
quotationmark

The existing answers talk about this being a C# 6 feature without a .NET framework component.

This is entirely true of nameof - but only somewhat true of string interpolation.

String interpolation will use string.Format in most cases, but if you're using .NET 4.6, it can also convert an interpolated string into a FormattableString, which is useful if you want invariant formatting:

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
    }    
}

Obviously this wouldn't work if $"{d}" simply invoked a call to string.Format... instead, in this case it calls string.Format in the statement assigning to local, and calls FormattableStringFactory.Create in the statement assigning to invariant, and calls FormattableString.Invariant on the result. If you try to compile this against an earlier version of the framework, FormattableString won't exist so it won't compile. You can provide your own implementation of FormattableString and FormattableStringFactory if you really want to, though, and the compiler will use them appropriately.

people

See more on this question at Stackoverflow