আমার একটি সিলভারলাইট অ্যাপ্লিকেশনটিতে একটি শর্ত রয়েছে যা 2 টি স্ট্রিংয়ের সাথে তুলনা করে, কোনও কারণে যখন আমি ==এটি ব্যবহার করি তখন সত্য প্রত্যাবর্তনের সময় এটি মিথ্যা.Equals() প্রত্যাবর্তন করে ।
কোডটি এখানে:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
কেন এমন ঘটনা ঘটছে?
==, তবে অপারেটরগুলি বহুকোষী নয়। এই কোডে ==অপারেটরটি টাইপ করা হয় object, যা একটি মানের পরিবর্তে একটি পরিচয় তুলনা করে।
==সংকলন-সময়ের ধরণের ভিত্তিতে একটি ওভারলোড চয়ন করে। Contentসম্পত্তি object। অপারেটরগুলি ভার্চুয়াল নয়, সুতরাং এর একটি ডিফল্ট বাস্তবায়ন ==বলা হয়, একটি রেফারেন্স সমতার তুলনা করে। সমান সাথে, কলটি ভার্চুয়াল পদ্ধতিতে যায় object.Equals(object); stringএই পদ্ধতিটিকে ওভাররাইড করে এবং স্ট্রিং সামগ্রীতে একটি সাধারণ তুলনা সম্পাদন করে। এমএসডিএন.মাইক্রোসফট . /en-us/library/fkfd9eh8(v=vs.110).aspx এবং রেফারেন্সসোর্স.মাইক্রোসফট /#mscorlib/system/string.cs,507 দেখুন ।
==সংকলন-টাইম টাইপ objectএবং ডানদিকে হাতের সংকলন-টাইপ টাইপ থাকে string, তখন সি # সংকলক অবশ্যই (সমস্যাযুক্ত, এই ক্ষেত্রে) ওভারলোড বাছাই করতে পারে operator ==(object, object); কিন্তু এটা হবে একটি কম্পাইল-টাইম সাবধানবাণী এটি অনিচ্ছাকৃত হতে পারে ইস্যু। তাই পড়া কম্পাইল-টাইম সতর্কবার্তা! ইস্যুটি ঠিক করতে এবং এখনও ব্যবহার ==করতে বাম দিকে কাস্ট করুন string। যদি আমি সঠিকভাবে মনে রাখি তবে সতর্কতা পাঠ্যটি ঠিক তেমন পরামর্শ দেয়।
