मैं स्ट्रिंग्स को कैसे प्रक्षेपित करूं?


106

मैं C # में निम्नलिखित करना चाहता हूं (पायथन पृष्ठभूमि से आ रहा है):

strVar = "stack"
mystr  = "This is %soverflow" % (strVar)

मैं स्ट्रिंग के अंदर टोकन को इसके बाहर के मूल्य के साथ कैसे बदल सकता हूं?

जवाबों:



270

इसे C # 6.0 (Visual Studio 2015+) के रूप में जोड़ा गया है।

उदाहरण:

var planetName = "Bob";
var myName = "Ford"; 
var formattedStr = $"Hello planet {planetName}, my name is {myName}!";
// formattedStr should be "Hello planet Bob, my name is Ford!"

इस के लिए सिंथेटिक चीनी है:

var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName);

अतिरिक्त संसाधन:

स्ट्रिंग इंटरपोलेशन फॉर सी # (v2) डिस्कशन

C # 6.0 भाषा पूर्वावलोकन


मोनो के लिए पैच (2009 दिनांकित, आपका माइलेज भिन्न हो सकता है) tirania.org/blog/archive/2009/Dec-20.html
जेफरी गुफा

1
मोनो उपयोगकर्ताओं के लिए: stackoverflow.com/questions/29208869/…
जेफरी गुफा

यह विशेषता इतनी सुंदर चीज है। विशेष रूप से VS2015 और संपादक समर्थन के साथ ताकि आप स्पष्ट रूप से प्रक्षेपित तारों को देख सकें और अंतर्मुखी हो सकें। यह भी तरीकों के साथ काम करता है! $("This feature is {GetDescription(FEATURE_AMAZING))}");
पैट्रिक

14

आप string.Formatमानों को स्ट्रिंग्स में छोड़ने के लिए उपयोग कर सकते हैं :

private static readonly string formatString = "This is {0}overflow";
...
var strVar = "stack";
var myStr = string.Format(formatString, "stack");

एक विकल्प C # संघनन ऑपरेटर का उपयोग करना है:

var strVar = "stack";
var myStr = "This is " + strVar + "overflow";

यदि आप बहुत अधिक संघटन कर रहे हैं तो उस StringBuilderवर्ग का उपयोग करें जो अधिक कुशल है:

var strVar = "stack";
var stringBuilder = new StringBuilder("This is ");
for (;;)
{
    stringBuilder.Append(strVar); // spot the deliberate mistake ;-)
}
stringBuilder.Append("overflow");
var myStr = stringBuilder.ToString();


12

यदि आप वर्तमान में C # 6.0 के साथ Visual Studio 2015 का उपयोग करते हैं, तो निम्न प्रयास करें:

var strVar = "stack";

string str = $"This is {strVar} OverFlow";

उस सुविधा को स्ट्रिंग इंटरपोलेशन कहा जाता है।


6

उसके लिए कोई ऑपरेटर नहीं है। आपको उपयोग करने की आवश्यकता है string.Format

string strVar = "stack";
string mystr  = string.Format("This is {0}soverflow", strVar);

दुर्भाग्य string.Formatसे एक स्थिर विधि है, इसलिए आप बस नहीं लिख सकते "This is {0}soverflow".Format(strVar)। कुछ लोगों ने एक विस्तार विधि को परिभाषित किया है, जो इस वाक्यविन्यास को अनुमति देता है।



4

आपको उपयोग करना चाहिए String.Format()। सिंटैक्स थोड़ा अलग है, इसके बजाय संख्यात्मक प्लेसहोल्डर का उपयोग किया जाता है।

उदाहरण:

String.Format("item {0}, item {1}", "one", "two")

अच्छी तरह से देखिए अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/system.string.format.aspx


1

आपके पास 2 विकल्प हैं। आप या तो String.Format का उपयोग कर सकते हैं या आप concatenation ऑपरेटर का उपयोग कर सकते हैं।

String newString = String.Format("I inserted this string {0} into this one", oldstring);

या

String newString = "I inserted this string " + oldstring + " into this one";

कवर के तहत String.Format()StringBuilder का उपयोग करता है। StringBuilder आमतौर पर बहुत अधिक कुशल होती है जब बहुत सारे तार को समाप्‍त किया जाता है लेकिन संघनन संचालक एक बंद के लिए एकदम सही होता है। String.Format()जब प्रारूपण को आउटपुट पर लागू करने की आवश्यकता होती है, तो संख्यात्मक मानों के लिए पैडिंग या अग्रणी शून्य जोड़ने के लिए उपयोगी है। इसलिए String.Format()एक लूप में उपयोग करने से संभावित रूप से बहुत सारे स्ट्रिंगरबिल्डर्स को तुरंत मिल जाएगा। उस स्थिति में लूप के बाहर और लूप के AppendFormat()अंदर घोषित एकल स्ट्रिंगबेल्ट का उपयोग करना बेहतर होता है ।
डेविड क्लार्क

1

स्ट्रिंग के साथ प्लेसहोल्डर्स को लागू करने का एक और तरीका है। प्लेस, कुछ स्थितियों में अजीब तरह से मदद करता है:

mystr = mystr.Replace("%soverflow", strVar);

1

आप निम्न तरीके का उपयोग कर सकते हैं

स्ट्रिंग इंटरपोलेशन

$ विशेष चरित्र एक स्ट्रिंग शाब्दिक को एक प्रक्षेपित स्ट्रिंग के रूप में पहचानता है। जैसे

string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza  

एक प्रक्षेपित स्ट्रिंग एक स्ट्रिंग शाब्दिक है जिसमें प्रक्षेपित भाव हो सकते हैं। जब एक प्रक्षेपित स्ट्रिंग को परिणाम स्ट्रिंग में हल किया जाता है, तो प्रक्षेपित अभिव्यक्तियों के साथ आइटम को अभिव्यक्ति परिणामों के स्ट्रिंग प्रतिनिधित्व द्वारा प्रतिस्थापित किया जाता है।

String.Format

स्ट्रिंग का उपयोग करें। यदि आपको किसी ऑब्जेक्ट के मूल्य, चर या अभिव्यक्ति को किसी अन्य स्ट्रिंग में डालने की आवश्यकता है

WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));


0

आप इसे विस्तारक के साथ पूरा कर सकते हैं: https://github.com/anderly/Expansive


C # में इंटरपोलेशन मेकेनिज्म है। इस कार्यक्षमता के लिए लाइब्रेरी शामिल करने का कोई कारण नहीं है।
प्रदर्शन नाम

2
@Displayname प्रश्न पर तारीख को देखो। C # में हमेशा निर्मित स्ट्रिंग प्रक्षेप नहीं होता है। इसे 2016 में C # 6 में जोड़ा गया था। इसलिए, 2014 में मेरे जवाब का कारण।
21
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.