Làm thế nào để sử dụng toán tử ternary bên trong một chuỗi nội suy?


408

Tôi bối rối về lý do tại sao mã này sẽ không được biên dịch:

var result = $"{fieldName}{isDescending ? " desc" : string.Empty}";

Nếu tôi tách nó ra, nó hoạt động tốt:

var desc = isDescending ? " desc" : string.Empty;
var result = $"{fieldName}{desc}";

9
@Sinatr Liên kết cập nhật: thebillwagner.com/Blog/Item/ từ
Nate Barbettini

Điều tương tự cũng áp dụng cho vòng loại bí danh không gian tên (: :) .
Uwe Keim

Thảo luận liên quan đến nhóm Roslyn: Lỗi cú pháp lạ trong chuỗi nội suy khi sử dụng ?:
phút

Câu trả lời:


722

Theo tài liệu :

Cấu trúc của một chuỗi nội suy như sau:

{ <interpolationExpression>[,<alignment>][:<formatString>] }

Vấn đề là dấu hai chấm được sử dụng để biểu thị định dạng, như:

Console.WriteLine($"The current hour is {hours:hh}")

Giải pháp là bọc các điều kiện trong ngoặc đơn:

var result = $"Descending {(isDescending ? "yes" : "no")}";

2
Thậm chí thú vị hơn ví dụ là cái này khi bạn cần sử dụng một chuỗi suy lồng nhau: Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
Jan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.