.NET में, मैं दोनों \r
या \n
स्ट्रिंग शाब्दिक प्रदान कर सकता हूं , लेकिन "नई लाइन" जैसे कुछ विशेष गुण को Environment.NewLine
स्थैतिक संपत्ति की तरह सम्मिलित करने का एक तरीका है ?
.NET में, मैं दोनों \r
या \n
स्ट्रिंग शाब्दिक प्रदान कर सकता हूं , लेकिन "नई लाइन" जैसे कुछ विशेष गुण को Environment.NewLine
स्थैतिक संपत्ति की तरह सम्मिलित करने का एक तरीका है ?
जवाबों:
खैर, सरल विकल्प हैं:
string.Format
:
string x = string.Format("first line{0}second line", Environment.NewLine);
स्ट्रिंग संघनन:
string x = "first line" + Environment.NewLine + "second line";
स्ट्रिंग प्रक्षेप (सी # 6 और ऊपर में):
string x = $"first line{Environment.NewLine}second line";
आप भी हर जगह \ n का उपयोग कर सकते हैं, और प्रतिस्थापित कर सकते हैं:
string x = "first line\nsecond line\nthird line".Replace("\n",
Environment.NewLine);
ध्यान दें कि आप इसे एक स्ट्रिंग स्थिर नहीं बना सकते , क्योंकि इसका मूल्य Environment.NewLine
निष्पादन के समय ही उपलब्ध होगा।
Environment.NewLine
चाहते हैं? इसके विपरीत, इसका उपयोग करने के लिए यह एक अच्छा अभ्यास है
यदि आप एक कास्ट स्ट्रिंग चाहते हैं जिसमें एनवायरनमेंट शामिल है। इसमें न्यूलाइन आप कुछ इस तरह से कर सकते हैं:
const string stringWithNewLine =
@"first line
second line
third line";
चूंकि यह एक कास्ट स्ट्रिंग में है, इसलिए इसे संकलन समय में किया जाता है इसलिए यह एक नई पंक्ति के संकलक की व्याख्या है। मैं इस व्यवहार की व्याख्या करते हुए एक संदर्भ नहीं ढूंढ सकता, लेकिन, मैं यह साबित कर सकता हूं कि यह काम करता है। मैंने इस कोड को विंडोज और उबंटू दोनों पर संकलित किया है (मोनो के साथ) फिर असंतुष्ट और ये परिणाम हैं:
जैसा कि आप देख सकते हैं, विंडोज में न्यूलाइन्स को \ n के रूप में और Ubuntu पर \ n के रूप में व्याख्या की जाती है
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
first + Environment.NewLine + second
जो अधिक कुशल और (IMO) पढ़ने में आसान है?
String.Format
एक ही बार में 1 स्ट्रिंग का उत्पादन होगा (लेकिन यह आंतरिक रूप से थोड़ा धीमा है क्योंकि संस्कृति विशिष्ट संघनन, आदि), जबकि स्ट्रिंग संघात - 1 परिणामस्वरूप + 1 अस्थायी, सही?
String.Concatenate
, जो सीधे सिर्फ एक आउटपुट स्ट्रिंग (IIRC बनाता है, यदि स्ट्रिंग्स शाब्दिक हैं तो कंपाइलर में कंसैशन किया जाता है।
"a"+b+"c"+d
प्रदर्शन के आधार पर एक से अधिक लेकिन एक-पंक्ति स्ट्रिंग संघनन ( , आदि) एक एकल के बराबर हैं? या सिर्फ करने के लिए परिवर्तित String.Concatenate(a,b,c,d,etc)
, सही?
string.Format
टिप्पणी में सुझाव नहीं दिया । स्ट्रिंग संघनन किसी भी अस्थायी तार का उत्पादन नहीं करेगा, क्योंकि कंपाइलर कॉल करेगा string.Concat(first, Environment.NewLine, second)
।
पर्यावरण के सुविधाजनक प्लेसमेंट का एक और तरीका है। प्रारूप स्ट्रिंग में नई लाइन। यह विचार स्ट्रिंग विस्तार विधि बनाने का है जो सामान्य रूप से स्ट्रिंग को प्रारूपित करता है, लेकिन पर्यावरण के साथ पाठ में {nl} को प्रतिस्थापित करता है
प्रयोग
" X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2);
gives:
X=1
Y=2
X+Y=3
कोड
///<summary>
/// Use "string".FormatIt(...) instead of string.Format("string, ...)
/// Use {nl} in text to insert Environment.NewLine
///</summary>
///<exception cref="ArgumentNullException">If format is null</exception>
[StringFormatMethod("format")]
public static string FormatIt(this string format, params object[] args)
{
if (format == null) throw new ArgumentNullException("format");
return string.Format(format.Replace("{nl}", Environment.NewLine), args);
}
ध्यान दें
यदि आप चाहते हैं कि ReSharper आपके मापदंडों को उजागर करे, तो उपरोक्त विधि में विशेषता जोड़ें
[StringFormatMethod ( "प्रारूप")]
यह कार्यान्वयन स्पष्ट रूप से सिर्फ स्ट्रिंग.फॉर्मट की तुलना में कम कुशल है
शायद एक, जो इस सवाल में रुचि रखते हैं, अगले सवाल में भी दिलचस्पी होगी: C # में नामित स्ट्रिंग स्वरूपण
नए .net संस्करण आपको शाब्दिक के सामने $ का उपयोग करने की अनुमति देते हैं जो आपको निम्न प्रकार के अंदर चर का उपयोग करने की अनुमति देता है:
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
यदि आप वास्तव में एक निरंतरता के रूप में नई लाइन स्ट्रिंग चाहते हैं, तो आप ऐसा कर सकते हैं:
public readonly string myVar = Environment.NewLine;
C # में रीडोनॉली कीवर्ड के उपयोगकर्ता का अर्थ है कि यह चर केवल एक बार सौंपा जा सकता है। आप इस पर दस्तावेज़ीकरण देख सकते हैं यहां । यह एक स्थिर चर की घोषणा की अनुमति देता है जिसका मूल्य निष्पादन समय तक ज्ञात नहीं है।
यदि आप वेब एप्लिकेशन के साथ काम कर रहे हैं तो आप यह कोशिश कर सकते हैं।
StringBuilder sb = new StringBuilder();
sb.AppendLine("Some text with line one");
sb.AppendLine("Some mpre text with line two");
MyLabel.Text = sb.ToString().Replace(Environment.NewLine, "<br />")
अगर मैं इस प्रश्न को समझता हूं: युगल "\r\n"
को उस नई लाइन को नीचे लाने के लिए textbox
। मेरे उदाहरण ने काम किया -
string s1 = comboBox1.Text; // s1 is the variable assigned to box 1, etc.
string s2 = comboBox2.Text;
string both = s1 + "\r\n" + s2;
textBox1.Text = both;
एक विशिष्ट उत्तर परिभाषित प्रकार शैली का उपयोग करने s1
s2
में हो सकता है text box
।