मैं खुद को ऑपरेटर प्राथमिकता और मूल्यांकन दिशा के विचार से भ्रमित कर रहा हूं।
नहीं, आप नहीं हैं। यह अक्सर भ्रमित होता है, हां, लेकिन यह वह चीज नहीं है जिसे आप भ्रमित कर रहे हैं क्योंकि न तो प्राथमिकता और मूल्यांकन का आदेश प्रासंगिक है कि क्या पूर्णांक को स्ट्रिंग में परिवर्तित किया गया है या फिर एक पूर्णांक जोड़ने के लिए कानूनी क्यों है एक स्ट्रिंग।
पहला बिंदु आप पर भ्रमित होने का दावा करते हैं पर आप unconfuse, नियम काफी सरल हैं करने के लिए:
- भाव ऑपरेटर पूर्वता और संबद्धता के अनुसार parenthesized कर रहे हैं।
- उप-संपीड़न का मूल्यांकन बाएं से दाएं क्रम में किया जाता है।
आपको यह सही करने के लिए जानने की आवश्यकता है।
Q()[R()] = A() * B() + C()/D();
पूर्वता और संबद्धता के अनुसार parenthesized है कि:
Q()[R()] = ((A() * B()) + (C()/D()));
और अब हर मान लीजिए क्यू() एक वस्तु एक सेटर के साथ एक इंडेक्सर है, और अन्य तरीकों सभी वापसी पूर्णांक रिटर्न उप-संपीड़न का मूल्यांकन बाएं से दाएं है। प्रत्येक सबएक्सप्रेस, जिसमें उप-अभिव्यक्तियां हैं जिनमें स्वयं उप-अभिव्यक्तियां हैं। तो यह कार्यक्रम के बराबर है:
var q = Q();
var r = R();
var a = A();
var b = B();
var t1 = a * b;
var c = C();
var d = D();
var t2 = c/d;
var t3 = t1 + t2;
और आखिर में क्यू पर इंडेक्स सेटर को इंडेक्स आर और वैल्यू टी 3 के साथ बुलाया जाता है।
ध्यान दें कि बाईं ओर प्रत्येक उप-संपीड़न का अधिकार प्रत्येक उप-संपीड़न से पहले दाएं किया जाता है। A() * B()
C()/D()
से बचा है, इसलिए यह पहले होता है।
इसमें आपके प्रश्न के साथ कुछ भी नहीं है। आपका प्रश्न गलतफहमी पर आधारित है।
मुझे पता है कि मैं क्यों ऊपर के उदाहरण में स्ट्रिंग में बदल जाती है चाहते हैं, और वास्तव में एक संकलन त्रुटि
देने नहीं आपके गलतफहमी है। i
स्ट्रिंग में कनवर्ट किया जा रहा है। इसे object
में परिवर्तित किया जा रहा है। आपका कार्यक्रम बिल्कुल के बराबर है:
int i = 10;
string k = "Test";
string t1 = System.String.Concat((object)i, (string)k);
Console.WriteLine(t1);
string t2 = System.String.Concat((string)k, (object)i);
Console.WriteLine(t2);
जैसा कि आप देख सकते हैं, वहाँ पहली जगह में स्ट्रिंग के लिए i
से कोई रूपांतरण नहीं है। i
को मुक्केबाजी रूपांतरण के माध्यम से ऑब्जेक्ट में परिवर्तित किया गया है और फिर String.Concat
विधि पर भेजा गया है। उस विधि को बॉक्स किए गए पूर्णांक पर object.ToString()
पर कॉल किया जाता है।
तो की पहली छमाही के साथ संबंधित है कि:
मैं चाहता हूँ पता करने के लिए मैं क्यों ऊपर के उदाहरण में स्ट्रिंग में बदल जाती है, और नहीं वास्तव में एक संकलन त्रुटि
दूसरी छमाही दे है: कोई संकलन त्रुटि क्यों नहीं है?
संकलन त्रुटि क्यों होनी चाहिए? सी # विनिर्देश कहता है कि आप किसी ऑब्जेक्ट, या किसी भी ऑब्जेक्ट को किसी भी स्ट्रिंग में कोई स्ट्रिंग जोड़ सकते हैं। एक int एक वस्तु है, और इसलिए आप इसे एक स्ट्रिंग में जोड़ सकते हैं।
धन्यवाद - जल्दी से spec पर नहीं जा सका :) –