C# Tutorial ตอนที่ 5(switch..case และ การจัด format string)
posted on 09 Jun 2005 14:09 by tidno1 in csharp-and-dotnetswitch..case
switch..case ก็เป็นการเขียน if clause แบบหนึ่งที่ง่ายขึ้น มีรูปแบบ syntax ดังนี้
case <value> : <statement>
case <value> : <statement>
case <value> : <statement>
..........................
[default : <statement>]
}
โดย default นั้นเปรียบเสมือน else ... ซึ่งจะเป็น option ที่จะมีก็ได้ ไม่มีก็ได้
ลองมาดูตัวอย่างเพื่อความเข้าใจดีกว่า
string gradeString;
switch(grade) {
case 4 : gradeString = "A";
case 3 : gradeString = "B";
case 2 : gradeString = "C";
case 1 : gradeString = "D";
case 0 : gradeString = "F";
default : gradeString = "Incorrect number";
}
Console.WriteLine(gradeString);
string gradeString;
if(grade == 4) {
gradeString = "A";
} else if(grade == 3) {
gradeString = "B";
} else if(grade == 2) {
gradeString = "C";
} else if(grade == 1) {
gradeString = "D";
} else if(grade == 0) {
gradeString = "F";
} else {
gradeString = "Incorrect number";
}
Console.WriteLine(gradeString);
C
D
F
Incorrect number
วิธีแก้ปัญหากรณีนี้ก็คือใส่ประโยค break; ลงไปในแต่ละ case ดังนี้
string gradeString;
switch(grade) {
case 4 :
gradeString = "A";
break;
case 3 :
gradeString = "B";
break;
case 2 :
gradeString = "C";
break;
case 1 :
gradeString = "D";
break;
case 0 :
gradeString = "F";
break;
default :
gradeString = "Incorrect number";
}
Console.WriteLine(gradeString);
string message;
switch(grade) {
case 4 :
case 3 :
message = "You 're good";
break;
case 2 :
case 1 :
message = "You should pratice more";
break;
case 0 :
message = "try try and try";
break;
default :
message = "Incorrect number";
}
Console.WriteLine(message);
*ในภาษาอื่น ๆ นั้นตรง expression นั้นต้องเป็น integral type เท่านั้น นั่นคือจะต้องเป็นพวก int short,... หรือ char แต่ว่าใน C# นั้นสามารถใส่ expression เป็น string ได้ด้วย
string message;
switch(gradeString.ToUpper()) {
case "A" :
message = "Excellent";
break;
case "B" :
message = "Good";
break;
case "C" :
message = "Cool";
break;
case "D" :
message = "Try";
break;
case "F" :
message = "Get out!!";
break;
default :
message = "Incorrect grade";
}
Console.WriteLine(message);
Formatting String
คุ้น ๆ code ด้านล่างนี้ใช่มั้ยครับ
การเขียนอย่างนี้ไม่ได้ช่วยให้การอ่านประโยคนั้นต่อเนื่องเพียงอย่างเดียว แต่มันยังสามารถจะ format ได้อีกด้วย ลองดูตัวอย่างกัน
Console.WriteLine("{0,-5}{1,-5}", 123, 456); // Left-aligned
123 456
ถ้าเป็น C จะเขียนอย่างนี้ (ใน C ถ้าจะขึ้นบรรทัดใหม่ ต้องใส่ '\n' เองเสมอ)
printf("%-5d%-5d\n", 123, 456); // Left-aligned
writeln(123:-5, 456:-5); { Left-aligned }
Console.WriteLine("----------------");
Console.WriteLine("{0,-10}{1,6}", "Bill", 123456);
Console.WriteLine("{0,-10}{1,6}", "Polly", 7890);
----------------
Bill 123456
Polly 7890
นอกจากการกำหนดความกว้างแล้ว เรายังกำหนดรูปแบบได้อีกด้วย โดยการใส่ :(colon) แล้วตามด้วยตัวอักษรลงไปหลังตัวเลขระบุตำแหน่ง ดังนี้
| Character | ความหมาย |
|---|---|
| C หรือ c | Currency(เงิน) |
| D หรือ d | Decimal(แปลว่าเลขฐาน 10 นะ อย่าสับสนกับ ตัวแปรประเภท decimal) |
| E หรือ e | Exponent(ระบบวิทยาศาสตร์) |
| Fหรือ f | Floating poing(ทศนิยม) |
| G หรือ g | General |
| N หรือ n | Number(เหมือน F แต่จะใส่ comma คั่นตัวเลขทุก ๆ 3 หลัก |
| P หรือ p | Percentage |
| R หรือ r | Round-trip ใช้กับ floating-point value เท่านั้น โดยจะ guaruntee ว่าค่าที่ถูกเปลี่ยนไปจะมีค่าเท่ากับตัวเดิม |
| X หรือ x | Hexadecimal(เลขฐาน 16) |
Console.WriteLine("{0:C}", i);
Console.WriteLine("{0:D}", i);
Console.WriteLine("{0:E}", i);
Console.WriteLine("{0:F}", i);
Console.WriteLine("{0:G}", i);
Console.WriteLine("{0:N}", i);
Console.WriteLine("{0:P}", i);
Console.WriteLine("{0:X}", i);
123456
1.234560E+005
123456.00
123456
123,456.00
12,345,600.00 %
1E240
เราสามารถรวมการจัดความกว้างและฟอร์แม็ตไปพร้อม ๆ กันได้ดังนี้
Console.WriteLine("{0,-12:N2}{1,9:X4}", 1234567, 240);
1,234,567.00 00F0
อ้อ ลองมาดูความแตกต่างของ F กับ R กันตรงนี้เลยครับ
Console.WriteLine("{0:F16}", d);
Console.WriteLine("{0:R16}", d);
1.2345678901234567
การจัด format สามารถทำได้ตอนสร้าง string ขึ้นมาตัวหนึ่งเลยก็ได้ ดังนี้ โดยใช้ method Format ของคลาส String ดังนี้

อ้อ ถ้าให้ดีควรมีโน๊ตให้ระวังการเทียบค่า Real ด้วยว่ามันอันตราย
เรื่องพวกนี้ตอนมัธยมไปเรียนแล้วไม่มีสอน สร้างความปวดหัวดีจริงๆ
#1 By ลิ่ว on 2005-06-09 16:27