หากคุณเคยสงสัยเกี่ยวกับความแตกต่างในวิธีการ BCL Reflectorคือเพื่อนของคุณ :-)
ฉันทำตามคำแนะนำเหล่านี้:
การจับคู่แบบตรงทั้งหมด: แก้ไข: ก่อนหน้านี้ฉันเคยใช้ตัวดำเนินการ == ตามหลักการที่ว่าข้างในเท่ากับ (สตริงสตริง) ตัวดำเนินการวัตถุ == ใช้เพื่อเปรียบเทียบการอ้างอิงวัตถุ แต่ดูเหมือนว่า strA.Equals (strB) ยังคงเป็น 1-11% โดยรวมเร็วกว่า string.Equals (strA, strB), strA == strB และ string.CompareOrdinal (strA, strB) ฉันวนลูปที่ทดสอบด้วย StopWatch บนค่าสตริงทั้งแบบ interned / non-interned ที่มีความยาวสตริงเดียวกัน / แตกต่างกันและขนาดที่แตกต่างกัน (1B ถึง 5MB)
strA.Equals(strB)
การจับคู่ที่มนุษย์อ่านได้ (วัฒนธรรมตะวันตก, ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่):
string.Compare(strA, strB, StringComparison.OrdinalIgnoreCase) == 0
การจับคู่ที่มนุษย์สามารถอ่านได้ (วัฒนธรรมอื่น ๆ ทั้งหมดตัวพิมพ์เล็ก / ใหญ่ / สำเนียง / คานา / อื่น ๆ ที่กำหนดโดย CultureInfo):
string.Compare(strA, strB, myCultureInfo) == 0
การจับคู่ที่มนุษย์สามารถอ่านได้ด้วยกฎที่กำหนดเอง (วัฒนธรรมอื่น ๆ ทั้งหมด):
CompareOptions compareOptions = CompareOptions.IgnoreCase
| CompareOptions.IgnoreWidth
| CompareOptions.IgnoreNonSpace;
string.Compare(strA, strB, CultureInfo.CurrentCulture, compareOptions) == 0