Compound Assignment Operators** รวมตัวดำเนินการคำนวณและการกำหนดค่า (Assignment) ในตัวดำเนินการเดียว ทำให้โค้ดสั้นและอ่านง่าย
รายการ Operator ทั้งหมด
| Operator | ชื่อ | เทียบเท่า |
|---|---|---|
+= | Addition Assignment | x = x + y |
-= | Subtraction Assignment | x = x - y |
*= | Multiplication Assignment | x = x * y |
/= | Division Assignment | x = x / y |
%= | Modulo Assignment | x = x % y |
&= | Bitwise AND Assignment | x = x & y |
|= | Bitwise OR Assignment | x = x | y |
^= | Bitwise XOR Assignment | x = x ^ y |
<<= | Left Shift Assignment | x = x << y |
>>= | Right Shift Assignment | x = x >> y |
=> | Lambda Operator | (ไม่ใช่ Compound Assignment) |
ตัวอย่างการใช้งาน
using System;
namespace Program
{
class MyClass
{
public static void Main(string[] args)
{
int val = 7;
val += 3; // val = val + 3 = 10
Console.WriteLine($"Addition: {val}");
val -= 2; // val = val - 2 = 8
Console.WriteLine($"Subtraction: {val}");
val *= 7; // val = val * 7 = 56
Console.WriteLine($"Multiplication: {val}");
val /= 7; // val = val / 7 = 8
Console.WriteLine($"Division: {val}");
val %= 5; // val = val % 5 = 3
Console.WriteLine($"Modulo: {val}");
val &= 9; // val = val & 9 = 1 (Binary: 1000 & 1001 = 1000? Wait: 8 & 9 = 8... Let me check: 3 & 9 = 1)
Console.WriteLine($"Bitwise AND: {val}");
val <<= 3; // val = val << 3 = 8
Console.WriteLine($"Left Shift: {val}");
val >>= 5; // val = val >> 5 = 0
Console.WriteLine($"Right Shift: {val}");
}
}
}
ผลลัพธ์
Addition: 10 Subtraction: 8 Multiplication: 56 Division: 8 Modulo: 3 Bitwise AND: 1 Left Shift: 8 Right Shift: 0
ข้อควรระวัง
- Evaluation Order:
x += yประเมินxเพียงครั้งเดียว (สำคัญถ้า x เป็น Property/Indexer ที่มี Side Effect) - Implicit Conversion:
byte b = 10; b += 20;ทำงานได้ (Implicit Convert กลับ byte) แต่b = b + 20ต้อง Cast - Null Coalescing Assignment (C# 8+):
??=- กำหนดค่าเฉพาะเมื่อ Null:x ??= defaultValue;
Null Coalescing Assignment (??=)
string name = null; name ??= "Default"; // name = "Default" name ??= "Other"; // ไม่เปลี่ยน (name ไม่ใช่ null แล้ว) Console.WriteLine(name); // "Default"