سؤال

وكان زميل العمل يسألني هذا، وفي ذهني أربك الدولة لم أكن أملك جوابا:

وماذا هو ما يمكنك القيام به:

string ham = "ham " + 4;

ولكن لا:

string ham = 4;

وإذا كان هناك الزهر / عملية ضمني لتحويل سلسلة عندما كنت وصل ، لماذا ليس هو نفسه عند <م> تكليف كسلسلة؟ (بدون القيام ببعض الحمولة الزائدة المشغل، وبطبيعة الحال)

هل كانت مفيدة؟

المحلول

عند وصل المترجم يحول "ham" + 4 البيان إلى دعوة لString.Concat، والتي تأخذ معلمتين object، بحيث يتم محاصر 4 القيمة ثم يسمى ToString على ذلك.

لالاحالة لا يوجد التحويل الضمني من int إلى string، وبالتالي لا يمكنك تعيين 4 إلى string دون تحويل بشكل صريح.

في بعبارة أخرى يتم التعامل مع المهمتين بشكل مختلف جدا من قبل المجمع، على الرغم من أنها تبدو مشابهة جدا في C #.

نصائح أخرى

<اقتباس فقرة>   

يتم مسبقا مشغلي + ثنائي ل   أنواع رقمية والسلسلة. الرقميه   أنواع، + يحسب مجموع اثنين في   المعاملات. عند واحد أو كلا المعاملات   هي من نوع السلسلة، + يسلسل   تمثيل سلسلة من   المعاملات.

المرجعي

<اقتباس فقرة>   

وهذا عامل التعيين (=) يخزن   قيمة المعامل الأيمن في ل   موقع التخزين، أو الملكية، أو مفهرس   الرمز بواسطة المعامل الأيسر، و   إرجاع القيمة نتيجة لها. ال   يجب أن تكون المعاملات من نفس النوع (أو   يجب أن يكون المعامل الأيمن   تحويل ضمنيا إلى نوع من   المعامل الأيسر).

المرجعي

وليس هناك التحويل الضمني عند القيام سلسلة. سلسلة سلسلة يحل صولا الى الدعوة String.Concat، التي لديها الزائد الذي يأخذ كائنات. هذا هو الزائد الذي ينفذ (واضح) التحويل إلى السلسلة.

وقيمة الجانب الأيمن من التعبير الأول عبارة عن سلسلة، في حين بلغت قيمة الجانب الأيمن من التعبير الثاني ليست كذلك. وconcatonation هو توفير السحر في السيناريو الأول، حيث الاحالة لا تفعل أي شيء خاص. في السيناريو الثاني، فإن مهمة للعب البكم.

والتعبير

"ham " + 4 

ويفرض التحويل الضمني من 4 إلى جملة مبنية على مزيج من نوع السلسلة وعامل الجمع. على وجه التحديد انها نوعية المشغل "+"، وعند القيام المشغل الحمولة الزائدة يمكنك تنفيذ نفس النوع من شيء يدويا.

وهناك مثال مشابه وأقل وضوحا ستكون كما يلي:

وmyNumber طويلة = Int64.MaxValue - 1؛

في هذه الحالة "1" ينبغي تقييم كعدد صحيح 32-بت ولكن يتم تحويلها ضمنيا. يمكنك التحقق من C # لغة القسم المواصفات 6.1 لقائمة شاملة تحويلات ضمنية بدعم من المجمع.

وتحرير: أن تكون واضحة، وقسم اللغة المواصفات أشرت إلى قوائم تحويلات ضمنية بدعم من المجمع، بينما شركات مثل "+" يمكن أن يكون التحويلات المدعومة الخاصة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top