เมธอด String.ToUpperInvariant() ใน C# ใช้สร้างสำเนาของสตริงที่แปลงเป็นตัวพิมพ์ใหญ่ (uppercase) ทั้งหมด โดยใช้กฎของ Invariant Culture (วัฒนธรรมที่ไม่เปลี่ยนแปลง/มาตรฐาน)
ไวยากรณ์ (Syntax)
public string ToUpperInvariant();
ตัวอย่างที่ 1: แปลงสตริงต่างๆ เป็นตัวพิมพ์ใหญ่
using System;
using System.Text;
public class Demo
{
public static void Main(string[] args)
{
string str1 = "one";
string str2 = "TWO";
string str3 = "ThrEE";
Console.WriteLine("String 1 = " + str1);
Console.WriteLine("String1 ToUpperInvariant = " + str1.ToUpperInvariant());
Console.WriteLine("String 2 = " + str2);
Console.WriteLine("String2 ToUpperInvariant = " + str2.ToUpperInvariant());
Console.WriteLine("String 3 = " + str3);
Console.WriteLine("String3 ToUpperInvariant = " + str3.ToUpperInvariant());
}
}
ผลลัพธ์
String 1 = one String1 ToUpperInvariant = ONE String 2 = TWO String2 ToUpperInvariant = TWO String 3 = ThrEE String3 ToUpperInvariant = THREE
ตัวอย่างที่ 2: เปรียบเทียบ ToUpperInvariant กับ ToLowerInvariant
using System;
public class Demo
{
public static void Main(string[] args)
{
string str1 = "abcd";
string str2 = "PQRS";
Console.WriteLine("String 1 = " + str1);
Console.WriteLine("String1 ToUpperInvariant = " + str1.ToUpperInvariant());
Console.WriteLine("String 2 = " + str2);
Console.WriteLine("String2 ToLowerInvariant = " + str2.ToLowerInvariant());
}
}
ผลลัพธ์
String 1 = abcd String1 ToUpperInvariant = ABCD String 2 = PQRS String2 ToLowerInvariant = pqrs
สรุป
ToUpperInvariant()แปลงเป็นตัวพิมพ์ใหญ่ด้วยกฎ Invariant Culture — ผลลัพธ์คงที่ ไม่ขึ้นกับระบบ/ภาษา/ภูมิภาค- เหมาะสำหรับ: internal processing, identifiers, protocols, file formats, database keys, comparisons
- ต่างจาก
ToUpper()ที่ใช้ CurrentCulture — อาจให้ผลต่างในบางภาษา (เช่น ตุรกี: 'i' → 'İ' ไม่ใช่ 'I') - สตริงเดิมไม่เปลี่ยน (immutable) — คืนสตริงใหม่
- มี
ToLowerInvariant()สำหรับตัวพิมพ์เล็ก
เมื่อไหร่ควรใช้ Invariant vs Current Culture
| สถานการณ์ | เมธอดที่แนะนำ | เหตุผล |
|---|---|---|
| แสดงผลให้ผู้ใช้ (UI, รายงาน) | ToUpper() / ToLower() | เคารพการตั้งค่าภาษาของผู้ใช้ |
| เปรียบเทียบสตริงภายใน (case-insensitive) | ToUpperInvariant() / ToLowerInvariant() | ผลลัพธ์สม่ำเสมอ ทุกสภาพแวดล้อม |
| กำหนดค่า config, registry, file format | ToUpperInvariant() / ToLowerInvariant() | ต้องอ่านได้เหมือนกันทุกเครื่อง |
| Protocol headers, HTTP, email, URL | ToLowerInvariant() | มาตรฐานระบุ lowercase (RFC) |
| Database keys, identifiers | ToUpperInvariant() หรือ ToLowerInvariant() | Consistent ไม่ขึ้นกับ server locale |
ตัวอย่าง: Case-insensitive comparison ที่ถูกต้อง
string a = "Straße"; // German sharp S string b = "STRASSE"; // ผิด - ใช้ CurrentCulture bool bad = a.ToUpper() == b.ToUpper(); // อาจ false ในบาง culture // ถูก - ใช้ InvariantCulture bool good = a.ToUpperInvariant() == b.ToUpperInvariant(); // true เสมอ // หรือดีกว่า - ใช้ StringComparison bool best = string.Equals(a, b, StringComparison.OrdinalIgnoreCase); // แนะนำสุด