Vâng, nó không hoàn toàn giống như các conditional operator, nhưng tôi nghĩ rằng bạn đang nghĩ đến việc các null coalescing operator (??). (Tôi đoán bạn đã nói nó là "tương tự" :) Lưu ý rằng "ternary" chỉ đề cập đến số toán hạng toán tử là - vì vậy trong khi toán tử điều kiện là toán tử bậc ba, toán tử kết hợp null là toán tử nhị phân.
Nó rộng rãi có dạng như sau:
result = first ?? second;
Đây second
sẽ chỉ được đánh giá nếu first
là null. Nó không phải là mục tiêu của một nhiệm vụ - bạn có thể sử dụng nó để đánh giá một đối số phương thức, ví dụ.
Lưu ý rằng toán hạng đầu tiên có để có thể vô hiệu hóa - nhưng điều thứ hai thì không. Mặc dù có một số chi tiết cụ thể về chuyển đổi, trong trường hợp đơn giản, loại biểu thức tổng thể là loại toán hạng thứ hai. Do associativity, bạn có thể ngăn xếp sử dụng của các nhà điều hành gọn gàng quá:
int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();
int result = x ?? y ?? z;
Lưu ý cách x
và y
là nullable, nhưng z
và result
thì không. Tất nhiên, z
có thể có thể bị vô hiệu hóa, nhưng sau đó result
cũng sẽ phải rỗng.
Về cơ bản toán hạng sẽ được đánh giá theo thứ tự chúng xuất hiện trong mã, với việc đánh giá dừng khi nó tìm thấy giá trị không null.
Ồ, và mặc dù ở trên được thể hiện dưới dạng các loại giá trị, nó cũng hoạt động với các loại tham chiếu (là luôn là không thể sử dụng).
Nguồn
2010-10-13 16:14:40
Có thể trùng lặp -> http: // stackoverflow.com/questions/463155/how-does-the-ternary-operator-work –
@Junior nhưng đó là về toán tử bậc ba trong khi đó là về toán tử kết hợp (bất chấp tiêu đề) – Rup
@Junior, trong khi tiêu đề của câu hỏi của tôi là ít gây hiểu lầm nếu bạn đọc câu hỏi của tôi, bạn sẽ thấy nó không có gì để làm với bản sao bạn đề nghị. –