2010-12-10 8 views
16

निम्नलिखित कोड को सफलतापूर्वक संकलित:मैं डीबगर में नई स्ट्रिंग का उपयोग क्यों नहीं कर सकता?

new string(new char[] { 'b', 'a', 'r' }); 

त्रुटि संदेश है:

'new string(new char[] { 'b', 'a', 'r' })' threw an exception of type 'System.ArgumentException' 
    base {System.SystemException}: {"Only NewString function evaluation can create a new string."} 
    Message: "Only NewString function evaluation can create a new string." 
    ParamName: null 

string foo = new string(new char[] { 'b', 'a', 'r' }); 

निम्नलिखित कोड है, तो घड़ी खिड़की या तत्काल विंडो में चिपकाया का मूल्यांकन किया जा करने में विफल रहता

ऐसा क्यों होता है?

+1

देखें द्वारा string कंस्ट्रक्टर्स करने के लिए कॉल करेंगे [इस ब्लॉग पोस्ट में VB.Net के साथ इस अपवाद नहीं देखेंगे ] (http://dotnetdust.blogspot.com/2009/03/string-construtor-stringchar-value.html)। – cdhowie

+1

यह अब वीएस 2015 में "निश्चित" है, मैं अनुमान लगा रहा हूं क्योंकि यह रोज़लिन का उपयोग करता है। –

उत्तर

23

सी # अभिव्यक्ति मूल्यांकनकर्ता ICorDebugEval & ICorDebugEval2 इंटरफेस को डीबगिंग सत्र के दौरान सीएलआर के साथ संवाद करने के लिए उपयोग करता है। वह इंटरफ़ेस किसी भी निर्माता को string प्रकार पर कॉल करने की अनुमति नहीं देता है। इसके बजाय यह ICorDebugEval::NewString विधि के माध्यम से जाने के लिए सभी कॉल को string का नया उदाहरण बनाने के लिए मजबूर करता है। सी # ईई ईई में विशेष मामले string नहीं है इसलिए यह सीधे निर्माता को कॉल करने और विफल होने का प्रयास करता है।

नोट आप दृश्य स्टूडियो 2010 यह विशेष मामला तर्कों का मूल्यांकन करने और ICorDebugEval::NewString पर जिसके परिणामस्वरूप string वस्तु अग्रेषण

+0

बिल्कुल 'न्यूस्ट्रिंग' विधि क्यों है? 'न्यू ऑब्जेक्ट' के माध्यम से स्ट्रिंग क्यों नहीं बनाई जाएंगी? – Brian

+0

@ ब्रायन, मुझे इतिहास पता नहीं है कि उन्होंने उस भेद को क्यों बनाया और जब मैंने थोड़ी देर पहले पूछा कि मौजूदा कोड रखरखाव भी नहीं थे। – JaredPar

+3

बस काम करने के लिए, आप इसका उपयोग कर सकते हैं: नई प्रणाली .ext.StringBuilder()। संलग्न करें (नया char [] {'b', 'a', 'r'})) ToString() –

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