// This is a .NET 3.5 console app, compiled with the C# 6 compiler from Visual Studio 2015 RTM
using System;

namespace System.Runtime.CompilerServices
{
    internal class FormattableStringFactory
    {
        public static FormattableString Create(string messageFormat, params object[] args)
        {
            return new FormattableString(messageFormat, args);
        }
    }
}

namespace System
{
    internal class FormattableString : IFormattable
    {
        private readonly string messageFormat;
        private readonly object[] args;

        public FormattableString(string messageFormat, object[] args)
        {
            this.messageFormat = messageFormat;
            this.args = args;
        }

        public override string ToString()
        {
            return string.Format(messageFormat, args);
        }

        public string ToString(string format, IFormatProvider formatProvider)
        {
            return string.Format(formatProvider, format ?? messageFormat, args);
        }

        public string ToString(IFormatProvider formatProvider)
        {
            return string.Format(formatProvider, messageFormat, args);
        }
    }
}

namespace ConsoleApp35
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 10;
            FormattableString fs = $"{nameof(x)}={x}";
            Console.WriteLine(fs);
            
            fs = $"{DateTime.Now}: {nameof(x)}={x}";
            Console.WriteLine(fs);
        }
    }
}