আমার একটি সিলভারলাইট অ্যাপ্লিকেশনটিতে একটি শর্ত রয়েছে যা 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
। যদি আমি সঠিকভাবে মনে রাখি তবে সতর্কতা পাঠ্যটি ঠিক তেমন পরামর্শ দেয়।