मौजूदा उत्तर इस बारे में बात करते हैं कि यह एक .NET फ्रेमवर्क घटक के बिना सी # 6 सुविधा है।
यह nameof
का पूरी तरह से सच है - लेकिन केवल कुछ हद तक स्ट्रिंग इंटरपोलेशन के सत्य है।
स्ट्रिंग प्रक्षेप ज्यादातर मामलों में string.Format
उपयोग करेगा, लेकिन आप नेट 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
के लिए एक कॉल लागू काम नहीं होगा ... इसके बजाय, इस मामले में यह बयान local
को बताए में string.Format
कहता है, और बयान invariant
को बताए में FormattableStringFactory.Create
कहता है, और पर FormattableString.Invariant
कॉल परिणाम। यदि आप ढांचे के पहले संस्करण के खिलाफ इसे संकलित करने का प्रयास करते हैं, तो FormattableString
मौजूद नहीं होगा, इसलिए यह संकलित नहीं होगा। यदि आप वास्तव में चाहते हैं, तो आप FormattableString
और FormattableStringFactory
का अपना कार्यान्वयन प्रदान कर सकते हैं, और संकलक उन्हें उचित रूप से उपयोग करेंगे।
स्रोत
2016-01-18 16:47:41
जॉन स्कीट द्वारा [संस्करणों को उलझाना] देखें (http://csharpindepth.com/Articles/Chapter1/Versions.aspx)। हालांकि इसमें सी # 6.0 शामिल नहीं है लेकिन अवधारणा एक जैसी है। – Habib