2008-10-02 13 views
21

मैं रनटाइम पर कुछ कोड जेनरेट करने की कोशिश कर रहा हूं जहां मैंने कुछ बॉयलर प्लेट सामग्री रखी है और उपयोगकर्ता को वास्तविक कार्य कोड दर्ज करने की अनुमति है। मेरे बॉयलर-प्लेट कोड इस तरह दिखता है:आप एक प्रारूप स्ट्रिंग में {और} कैसे डालते हैं

using System; 

public class ClassName 
{ 
    public double TheFunction(double input) 
    { 
     // user entered code here 
    } 
} 

आदर्श रूप में, मुझे लगता है कि मैं उपयोगकर्ता कोड डालने और एक अद्वितीय वर्ग के नाम बनाने के लिए String.Format उपयोग करना चाहते हैं, लेकिन मैं प्रारूप स्ट्रिंग जब तक पर एक अपवाद मिल यह इस तरह दिखता है:

string formatString = @" 
using System; 

public class ClassName 
{0} 
    public double TheFunction(double input) 
    {0} 
     {2} 
    {1} 
{1}"; 

तो मैं इस तरह String.Format फोन:

string entireClass = string.Format(formatString, "{", "}", userInput); 

यह ठीक है और मैं का उपयोग करने का कुरूपता के साथ सौदा कर सकते हैं {0} और {1} प्रारूप में मेरे स्थान पर स्ट्रिंग घुंघराले ब्रेसिज़ को छोड़कर कि अब मेरा उपयोगकर्ता इनपुट घुंघराले ब्रेसिज़ का उपयोग नहीं कर सकता है। क्या मेरे प्रारूप स्ट्रिंग में घुंघराले ब्रेसिज़ से बचने का कोई तरीका है, या उपयोगकर्ता कोड में घुंघराले ब्रेसिज़ को {0} और {1} में बदलने का एक अच्छा तरीका है?

बीटीडब्लू, मुझे पता है कि इस तरह की चीज एक सुरक्षा समस्या होने का इंतजार कर रही है, लेकिन यह एक विंडोज़ फॉर्म ऐप है जो नेट पर कनेक्ट नहीं होने वाले सिस्टम पर आंतरिक उपयोग के लिए है, इसलिए इस स्थिति में जोखिम स्वीकार्य है।

+0

यह एक सुरक्षा समस्या है क्योंकि उपयोगकर्ता द्वारा निष्पादित कोड सचमुच कुछ भी हो सकता है, क्योंकि यह 'नेट से जुड़ा हुआ नहीं है। – MusiGenesis

+0

असल में नहीं, सिर्फ इसलिए कि कोड कुछ भी हो सकता है, उपयोगकर्ता को कुछ भी करने की क्षमता नहीं देता है जो वह पहले नहीं कर सका। ऐप उपयोगकर्ता के समान संदर्भ में चलता है और केवल उस मशीन तक पहुंचने वाला कोई भी व्यक्ति जिस पर चल रहा है वह कोड पेश कर सकता है। –

उत्तर

1

डबल ब्रेसिज़: string.Format("{{ {0} }}", "Hello, World"); उत्पादन होगा { Hello, World }

5

क्या मुझे लगता है कि आप यह चाहते हैं ...

string formatString = @" 
using System; 

public class ClassName 
{{ 
    public double TheFunction(double input) 
    {{ 
     {0} 
    }} 
}}"; 

string entireClass = string.Format(formatString, userInput); 
0

अतिरिक्त अतिरिक्त सावधान रहें कि किसके पास एप्लिकेशन तक पहुंच है। एक बेहतर समाधान एक साधारण पार्सर बनाने के लिए हो सकता है जो केवल कुछ, सीमित, कमांड की अपेक्षा करता है।

+0

हाँ, केवल 5 या 6 लोग होंगे जिनके पास इस एप्लिकेशन का उपयोग करने का कारण है, जैसे मैंने कहा, जोखिम बहुत स्वीकार्य है। –

संबंधित मुद्दे