web-dev-qa-db-fra.com

L'interpolation de chaînes ne fonctionne pas avec .NET Framework 4.6

Je viens d'installer le .NET Framework 4.6 sur ma machine, puis j'ai créé une ConsoleApplication ciblant .NET Framework 4.6 avec Visual Studio 2013.

J'ai écrit ce qui suit dans la méthode Main:

  string test = "Hello";
  string format = $"{test} world!";

Mais cela ne compile pas. Faire de même dans Visual Studio 2015 fonctionne.
Pourquoi?

27
Bidou

L'interpolation de chaînes est une fonctionnalité C # 6.0, pas une de .NET Framework 4.6. VS 2013 ne prend pas en charge C # 6 mais VS 2015 le fait.

45
Daniel Hilgarth

L'interpolation de chaînes est en effet une fonctionnalité C # 6.0, mais C # 6 n'est pas limitée à VS2015.

Vous pouvez compiler des applications qui exploitent les fonctionnalités du langage C # 6.0 dans VS2013 en ciblant la plate-forme du compilateur Roslyn via le Microsoft.Net.Compilerspackage NuGet .

D'après mon expérience, après l'installation de ce package, les messages d'erreur lors de la compilation peuvent être un peu trompeurs. Si vous avez des erreurs de compilation qui ne sont pas liées à C # 6, vous verrez ces messages d'erreur ainsi que des messages d'erreur concernant la syntaxe non valide relative à toutes les fonctionnalités C # 6 que vous avez utilisées malgré le fait que vous ciblez maintenant un compilateur qui les prend en charge.

Par exemple...

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Title = "Home Page";
        var example = $"{ViewBag.Title}";
        ImASyntaxErrorWhatAmIWheresMySemicolonLOL
        return View();
    }
} 

entraînera 4 messages d'erreur lors de la compilation:

Erreur 1 Caractère inattendu '$'

Erreur 2 Terme d'expression non valide ''

Erreur 3; attendu

Erreur 4; attendu

Les 3 premières erreurs se rapportent ici à la ligne qui utilise l'interpolation de chaîne, seule la dernière ; expected l'erreur est un problème. Supprimez la ligne incriminée juste avant de renvoyer le View et les erreurs de compilation d'interpolation de chaîne disparaissent et tout va bien.

28
joelmdev