आप प्रक्षेप के साथ वर्बेटिम स्ट्रिंग्स का उपयोग कैसे करते हैं?


133

C # 6 में एक नई विशेषता है: प्रक्षेपित तार।

ये आपको अनुक्रमणिका पर निर्भर रहने के बजाय सीधे कोड में अभिव्यक्ति देते हैं:

string s = string.Format("Adding \"{0}\" and {1} to foobar.", x, this.Y());

हो जाता है:

string s = $"Adding \"{x}\" and {this.Y()} to foobar.";

हालाँकि, हमारे पास इस तरह वर्बटीम स्ट्रिंग्स (मुख्य रूप से SQL स्टेटमेंट) का उपयोग करके कई लाइनों में बहुत सारे तार हैं:

string s = string.Format(@"Result...
Adding ""{0}"" and {1} to foobar:
{2}", x, this.Y(), x.GetLog());

इन्हें नियमित तार में बदलना गड़बड़ लगता है:

string s = "Result...\r\n" +
$"Adding \"{x}\" and {this.Y()} to foobar:\r\n" +
x.GetLog().ToString();

मैं शब्दशः और प्रक्षेपित तार दोनों को एक साथ कैसे उपयोग करूं?


3
यदि यह वास्तव में SQL स्ट्रिंग्स के बारे में है, तो क्या इसके बजाय आप पैराड्राइज्ड प्रश्नों का उपयोग नहीं कर रहे हैं?
18

1
"हमारे पास वर्बेटिम स्ट्रिंग्स (मुख्य रूप से एसक्यूएल स्टेटमेंट्स) का उपयोग करके कई लाइनों में बहुत सारे तार हैं" ऐसा लगता है कि आपके पास एसक्यूएल इंजेक्शन हमलों को सक्षम करने के लिए बहुत सारे स्ट्रिंग हैं।
सीटिन बसोज

1
@svick हम कर रहे हैं, सब कुछ उपयोगकर्ता इनपुट पैरामीटरेट किया गया है। हम अभी भी गतिशील SQL का भारी उपयोग करते हैं, क्योंकि हम गतिशील रूप से कोड में हमारी संस्थाओं के लिए SQL बनाते हैं।
कीथ

1
@CetinBasoz हम नहीं करते - सभी उपयोगकर्ता इनपुट को मानकीकृत किया गया है। ऐसी बहुत सी परिस्थितियाँ हैं जहाँ आपके पास गतिशील SQL है - उदाहरण के लिए LINQ या कोई अन्य ऑब्जेक्ट मैपिंग फ्रेमवर्क।
कीथ

जवाबों:


194

आप एक ही स्ट्रिंग में दोनों $और @उपसर्ग लागू कर सकते हैं :

string s = $@"Result...
Adding ""{x}"" and {this.Y()} to foobar:
{x.GetLog()}";

चूंकि सी # 6 में पेश किया गया था , प्रक्षेपित वर्बटिम स्ट्रिंग्स को टोकन के साथ शुरू करना था $@, लेकिन सी # 8 के साथ शुरू करना, आप $@या तो उपयोग कर सकते हैं@$


57
विपरीत ( @$"...") काम नहीं करता है, जो मुझे यहां लाता है।
सिनट्र

12
@Sinatr हाँ, यह $@"..."उसी क्रम में होना चाहिए ।
कीथ

36
तथ्य यह है कि $@जब काम @$करता है, तो सही समझ में नहीं आता है जब आप इसके बारे में सोचते हैं। जब मैं इस बारे में भ्रमित हो जाता हूं, जो अक्सर तब होता है जब मैंने इस वाक्यविन्यास का उपयोग करना शुरू किया, तो मैंने हमेशा खुद से कहा: "इस शब्दशः स्ट्रिंग को इंटरपोलेट करें" क्योंकि विपरीत का कोई मतलब नहीं होगा।
हीकी

1
@RayLuo वास्तव में नहीं, लेकिन यह देखते हुए कि कितनी तेजी से विभिन्न .NET JSON धारावाहिक बन गए हैं, शायद आपको सीधे JSON को एन्कोडिंग नहीं करना चाहिए।
कीथ

1
यदि किसी मौजूदा में डुओ को लागू करते हैं const string, तो ड्रॉप करें const
bvj
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.