ฉันมีเงื่อนไขในการประยุกต์ใช้ Silverlight ที่เปรียบเทียบ 2 สายด้วยเหตุผลบางอย่างเมื่อผมใช้==มันกลับผิดพลาดในขณะที่.Equals()ผลตอบแทนที่แท้จริง
นี่คือรหัส:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
มีเหตุผลอะไรที่ทำให้สิ่งนี้เกิดขึ้น?
==แต่ตัวดำเนินการไม่ใช่ polymorphic ในรหัสนี้==ผู้ประกอบการจะเรียกใช้กับประเภทobjectซึ่งจะทำการเปรียบเทียบตัวตนแทนค่าหนึ่ง
==โอเวอร์โหลดตามชนิดเวลาคอมไพล์ของตัวถูกดำเนินการ ทรัพย์สินContent objectผู้ประกอบการไม่ได้เป็นเสมือนจริงดังนั้นการดำเนินงานเริ่มต้นของการ==เรียกว่าให้การเปรียบเทียบความเท่าเทียมกันอ้างอิง ด้วยเท่ากับโทรไปที่วิธีการเสมือนobject.Equals(object); stringแทนที่เมธอดนี้และทำการเปรียบเทียบตามลำดับบนเนื้อหาสตริง ดูmsdn.microsoft.com/en-us/library/fkfd9eh8(v=vs.110).aspxและreferencesource.microsoft.com/#mscorlib/system/string.cs,507
==มีการรวบรวมเวลาประเภทobjectและด้านขวามีประเภทการรวบรวมเวลาstringแล้วคอมไพเลอร์ C # จะต้องเลือกเกินพิกัด (มีปัญหาในกรณีนี้) operator ==(object, object); แต่มันจะออกคำเตือนเวลารวบรวมที่อาจไม่ได้ตั้งใจ ดังนั้นอ่านคำเตือนเวลารวบรวม! ในการแก้ไขปัญหาและยังคงการใช้หล่อด้านซ้ายมือเพื่อ== stringหากฉันจำได้อย่างถูกต้องข้อความเตือนจะแจ้งให้ทราบอย่างนั้น
