Bagikan melalui


Operator dan ekspresi C#

C# menyediakan sejumlah operator. Banyak dari mereka didukung oleh jenis bawaan dan memungkinkan Anda melakukan operasi dasar dengan nilai jenis tersebut. Operator tersebut mencakup grup berikut:

Biasanya, Anda dapat membebani operator tersebut, yaitu, menentukan perilaku operator untuk operan jenis yang ditentukan pengguna.

Ekspresi C# yang paling sederhana adalah literal (misalnya, bilangan bulat dan angka riil ) dan nama variabel. Anda dapat menggabungkannya ke dalam ekspresi kompleks dengan menggunakan operator. Prioritas operator dan associativity menentukan urutan operasi dalam ekspresi dilakukan. Anda dapat menggunakan tanda kurung untuk mengubah urutan evaluasi yang diberlakukan oleh prioritas operator dan associativity.

Dalam kode berikut, contoh ekspresi berada di sisi kanan penugasan:

int a, b, c;
a = 7;
b = a;
c = b++;
b = a + b * c;
c = a >= 100 ? b : c / 10;
a = (int)Math.Sqrt(b * b + c * c);

string s = "String literal";
char l = s[s.Length - 1];

List<int> numbers = [..collection];
b = numbers.FindLast(n => n > 1);

Biasanya, ekspresi menghasilkan hasil dan dapat disertakan dalam ekspresi lain. void Panggilan metode adalah contoh ekspresi yang tidak menghasilkan hasil. Ini hanya dapat digunakan sebagai pernyataan, seperti yang ditunjukkan contoh berikut:

Console.WriteLine("Hello, world!");

Berikut adalah beberapa jenis ekspresi lain yang disediakan C#:

  • Ekspresi string terinterpolasi yang menyediakan sintaksis yang nyaman untuk membuat string yang diformat:

    var r = 2.3;
    var message = $"The area of a circle with radius {r} is {Math.PI * r * r:F3}.";
    Console.WriteLine(message);
    // Output:
    // The area of a circle with radius 2.3 is 16.619.
    
  • Ekspresi Lambda yang memungkinkan Anda membuat fungsi anonim:

    int[] numbers = { 2, 3, 4, 5 };
    var maximumSquare = numbers.Max(x => x * x);
    Console.WriteLine(maximumSquare);
    // Output:
    // 25
    
  • Ekspresi kueri yang memungkinkan Anda menggunakan kemampuan kueri langsung di C#:

    int[] scores = { 90, 97, 78, 68, 85 };
    IEnumerable<int> highScoresQuery =
        from score in scores
        where score > 80
        orderby score descending
        select score;
    Console.WriteLine(string.Join(" ", highScoresQuery));
    // Output:
    // 97 90 85
    

Anda dapat menggunakan definisi isi ekspresi untuk memberikan definisi ringkas untuk metode, konstruktor, properti, pengindeks, atau finalizer.

Prioritas operator

Dalam ekspresi dengan beberapa operator, operator dengan prioritas yang lebih tinggi dievaluasi sebelum operator dengan prioritas yang lebih rendah. Dalam contoh berikut, perkalian dilakukan terlebih dahulu karena memiliki prioritas yang lebih tinggi daripada penambahan:

var a = 2 + 2 * 2;
Console.WriteLine(a); //  output: 6

Gunakan tanda kurung untuk mengubah urutan evaluasi yang diberlakukan oleh prioritas operator:

var a = (2 + 2) * 2;
Console.WriteLine(a); //  output: 8

Tabel berikut mencantumkan operator C# yang dimulai dengan prioritas tertinggi hingga terendah. Operator dalam setiap baris memiliki prioritas yang sama.

Para Operator Kategori atau nama
x.y, f(x), a[i], x?.y, , x?[y]x++, x--, x!, baru, typeof, checked, unchecked, default, nameof, delegasi, sizeof, stackalloc, x-y> Utama
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true dan false Unari
x..y Jangkauan
switch, dengan ekspresi switch dan with
x * y, x / y, x % y bersifat perkalian
x + y, x – y Aditif
x << y, x >> y, x >>> y Pergeseran
x < y, x > y, x <= y, x >= y, is, is, as Pengujian relasi dan tipe
x == y, x != y Kesetaraan
x & y Logis Boolean AND atau bitwise logis AND
x ^ y XOR logis Boolean atau XOR logis bitwise
x | y Logis Boolean ATAU logisbitwise OR
x & y Kondisional DAN
x || y Atau Bersyarat
x ?? y Operator null-coalescing
c ? t : f Operator bersyarah
x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x >>>= y, x?? = y, => Penugasan dan deklarasi lambda

Untuk informasi tentang prioritas combinator pola logis, lihat bagian Prioritas dan urutan pemeriksaan pola logis dari artikel Pola .

Associativity operator

Ketika operator memiliki prioritas yang sama, asokiativitas operator menentukan urutan di mana operasi dilakukan:

  • Operator asosiatif kiri dievaluasi secara berurutan dari kiri ke kanan. Kecuali untuk operator penugasan dan operator null-coalescing, semua operator biner bersifat asosiatif kiri. Misalnya, a + b - c dievaluasi sebagai (a + b) - c.
  • Operator asosiatif kanan dievaluasi secara berurutan dari kanan ke kiri. Operator penugasan, operator null-coalescing, lambda, dan operator ?:kondisional bersifat asosiatif kanan. Misalnya, x = y = z dievaluasi sebagai x = (y = z).

Penting

Dalam ekspresi formulir P?.A0?.A1, jika P adalah null, tidak juga A0A1 dievaluasi. Demikian pula, dalam ekspresi formulir P?.A0.A1, karena A0 tidak dievaluasi ketika P null, tidak ada A0.A1yang . Lihat spesifikasi bahasa C# untuk detail selengkapnya.

Gunakan tanda kurung untuk mengubah urutan evaluasi yang diberlakukan oleh asokiativitas operator:

int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}");  // output: a = 1, b = 6

Evaluasi operand

Tidak terkait dengan prioritas operator dan associativity, operan dalam ekspresi dievaluasi dari kiri ke kanan. Contoh berikut menunjukkan urutan operator dan operand dievaluasi:

Ekspresi Urutan evaluasi
a + b a, b, +
a + b * c a, b, c, *, +
a / b + c * d a, b, /, c, d, *, +
a / (b + c) * d a, b, c, +, /, d, *

Biasanya, semua operand operator dievaluasi. Namun, beberapa operator mengevaluasi operand secara kondisional. Artinya, nilai operand paling kiri dari operator tersebut menentukan apakah (atau mana) operand lain harus dievaluasi. Operator ini adalah operator logis kondisional AND (&&) dan OR (||),operator ?? null-coalescing dan ??=, operator ?. null-conditional dan ?[], dan operator kondisional ?:. Untuk informasi selengkapnya, lihat deskripsi setiap operator.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#:

Lihat juga