อะไรคือความแตกต่างและเมื่อใช้อะไร สิ่งที่มีความเสี่ยงถ้าฉันมักจะใช้ToLower()
และสิ่งที่เป็นความเสี่ยงถ้าฉันมักจะใช้ToLowerInvariant()
?
อะไรคือความแตกต่างและเมื่อใช้อะไร สิ่งที่มีความเสี่ยงถ้าฉันมักจะใช้ToLower()
และสิ่งที่เป็นความเสี่ยงถ้าฉันมักจะใช้ToLowerInvariant()
?
คำตอบ:
ขึ้นอยู่กับวัฒนธรรมปัจจุบัน ToLower อาจสร้างตัวอักษรตัวพิมพ์เล็กเฉพาะวัฒนธรรมที่คุณไม่ได้คาดหวัง เช่นการผลิตınfo
โดยไม่มีจุดบน i แทนinfo
และทำให้ mucking การเปรียบเทียบสตริง ด้วยเหตุนี้ ToLowerInvariant จึงควรใช้กับข้อมูลที่ไม่ใช่ภาษาใด ๆ เมื่อคุณอาจมีการป้อนข้อมูลผู้ใช้ที่อาจอยู่ในภาษาพื้นเมือง / ชุดอักขระของพวกเขาโดยทั่วไปจะเป็นเพียงครั้งเดียวที่คุณใช้ ToLower
ดูคำถามนี้สำหรับตัวอย่างของปัญหานี้: C # - ToLower () บางครั้งก็ลบจุดออกจากตัวอักษร "I"
ฉันคิดว่าสิ่งนี้มีประโยชน์:
http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx
ปรับปรุง
หากแอปพลิเคชันของคุณขึ้นอยู่กับกรณีของสตริงที่เปลี่ยนแปลงในลักษณะที่คาดการณ์ได้ซึ่งไม่ได้รับผลกระทบจากวัฒนธรรมปัจจุบันให้ใช้วิธี ToLowerInvariant กระบวนการ ToLowerInvariant วิธีเทียบเท่ากับ ToLower (CultureInfo.InvariantCulture) แนะนำให้ใช้วิธีการเมื่อชุดของสตริงต้องปรากฏในลำดับที่คาดการณ์ได้ในส่วนควบคุมผู้ใช้
ด้วย
... ToLower คล้ายกันมากในสถานที่ส่วนใหญ่ของ ToLowerInvariant เอกสารระบุว่าวิธีการเหล่านี้จะเปลี่ยนพฤติกรรมกับวัฒนธรรมตุรกีเท่านั้น นอกจากนี้ในระบบ Windows ระบบไฟล์จะคำนึงถึงขนาดตัวพิมพ์ซึ่ง จำกัด การใช้ ...
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
HTH
String.ToLower()
ใช้วัฒนธรรมเริ่มต้นในขณะที่String.ToLowerInvariant()
ใช้วัฒนธรรมที่ไม่เปลี่ยนแปลง ดังนั้นคุณจะได้เป็นหลักขอให้ความแตกต่างระหว่างวัฒนธรรมและคงเปรียบเทียบสตริงลำดับ
ToLower
สายพันธุ์ต่างๆ ลำดับสามัญกับค่าคงที่เพียงแค่เปลี่ยน "การเรียงลำดับ" ของสองสายไม่เปลี่ยนการเปรียบเทียบความเท่าเทียมกัน
TL; DR:
เมื่อทำงานร่วมกับ "เนื้อหา" (เช่นบทความที่โพสต์แสดงความคิดเห็นชื่อสถานที่อื่น ๆ ) ToLower()
การใช้งาน เมื่อทำงานร่วมกับ "ตัวอักษร" (อาร์กิวเมนต์บรรทัดเช่นคำสั่งไวยากรณ์ที่กำหนดเองสตริงที่ควรจะเป็น enums ฯลฯ ) ToLowerInvariant()
การใช้งาน
ตัวอย่าง:
= การใช้ToLowerInvariant
อย่างไม่ถูกต้อง =
ในภาษาตุรกีDIŞ
แปลว่า "ภายนอก" และdiş
แปลว่า "ฟัน" ปลอกต่ำที่เหมาะสมของการมีDIŞ
dış
ดังนั้นถ้าคุณใช้ToLowerInvariant
ผิดคุณอาจมีการพิมพ์ผิดในตุรกี
= การใช้ToLower
อย่างไม่ถูกต้อง =
ตอนนี้หลอกคุณกำลังเขียนตัวแยกวิเคราะห์ SQL บางแห่งคุณจะมีรหัสที่ดูเหมือนว่า:
if(operator.ToLower() == "like")
{
// Handle an SQL LIKE operator
}
ไวยากรณ์ SQL จะไม่เปลี่ยนแปลงเมื่อคุณเปลี่ยนวัฒนธรรม ฝรั่งเศสไม่ได้เขียนแทนSÉLECTIONNEZ x DE books
SELECT X FROM books
อย่างไรก็ตามเพื่อให้รหัสข้างต้นสามารถทำงานได้คนตุรกีจะต้องเขียนSELECT x FROM books WHERE Author LİKE '%Adams%'
(จดบันทึกจุดเหนือเมืองหลวง i ซึ่งแทบจะเป็นไปไม่ได้ที่จะเห็น) สิ่งนี้น่าผิดหวังสำหรับผู้ใช้ชาวตุรกีของคุณ