ฉันมีเงื่อนไขในการประยุกต์ใช้ 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
หากฉันจำได้อย่างถูกต้องข้อความเตือนจะแจ้งให้ทราบอย่างนั้น