Bagikan melalui


Operator dan ekspresi C# (referensi C#)

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

Biasanya, Anda dapat menambahkan operator tersebut, yaitu, menentukan perilaku operator untuk operand dari jenis yang ditentukan-pengguna.

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

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];

var numbers = new List<int>(new[] { 1, 2, 3 });
b = numbers.FindLast(n => n > 1);

Biasanya, ekspresi menghasilkan suatu hasil dan dapat disertakan dalam ekspresi lain. Panggilan metode void adalah contoh ekspresi yang tidak memproduksi suatu hasil. Metode tersebut 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 sintaks yang mudah untuk membuat string yang terformat:

    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 kapabilitas kueri secara langsung di C#:

    var scores = new[] { 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 lebih tinggi dievaluasi terlebih dahulu sebelum operator dengan prioritas yang lebih rendah. Dalam contoh berikut, perkalian dilakukan terlebih dahulu karena memiliki prioritas yang lebih tinggi daripada penjumlahan:

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.

Operator Kategori atau nama
x.y, f(x), a[i], x?.y, x?[y], x++, x--, x!, baru, jenisdari, dicentang, tak-dicentang, default, namadari, delegasi, ukurandari, stackalloc, x->y Primer
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, menunggu, &x, *x, benar dan salah Unary
x..y Rentang
bertukar, dengan ekspresi switch dan with
x * y, x / y, x % y Perkalian
x + y, x – y Penambahan
x << y, x >> y Shift
x < y, x > y, x <= y, x >= y, adalah, sebagai Pengujian relasional dan jenis
x == y, x != y Persamaan
x & y Boolean logical AND atau bitwise logical AND
x ^ y Boolean logical XOR atau bitwise logical XOR
x | y Boolean logical OR atau bitwise logical OR
x && y AND Bersyarat
x || y Bersyarat OR
x ?? y operator penggabungan-null
c ? t : f Operator Kondisional
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

Asosiasivitas operator

Ketika operator memiliki prioritas yang sama, asosiasivitas operator menentukan urutan operasi yang dilakukan:

  • Operator asosiatif kiri dievaluasi secara urut dari kiri ke kanan. Kecuali untuk operator penugasan dan operator penggabungan-nol, semua operator biner adalah asosiatif kiri. Misalnya, a + b - c dievaluasi sebagai (a + b) - c.
  • Operatorasosiatif kanan dievaluasi dari kanan ke kiri. Operator penugasan, operator penggabungan-nol, lambda, dan operator bersyarat?: adalah asosiatif-kanan. Misalnya, x = y = z dievaluasi sebagai x = (y = z).

Gunakan tanda kurung untuk mengubah urutan evaluasi yang diberlakukan oleh asosiasivitas 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 dan asosiasivitas operator, operans 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 semacam ini menentukan apakah (atau yang mana) operand lain harus dievaluasi. Operator ini adalah operator logis kondisional AND (&&) dan OR (||),operator penggabungan-nol??dan ??=, operator kondisional-nol ?. dan ?[], dan operator kondisional?:. Untuk informasi selengkapnya, lihat deskripsi masing-masing operator.

Spesifikasi bahasa C#

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

Lihat juga