2015-08-05 36 views
238

Tôi đang bối rối là tại sao mã này sẽ không biên dịch:Làm thế nào để sử dụng toán tử bậc ba bên trong một chuỗi nội suy?

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

Nếu tôi chia nó lên, nó hoạt động tốt:

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

[_Here là một bài tốt bởi Bill Wagner giải thích vấn đề trong detail_] (http://thebillwagner.com/Blog/Item/StringInterpolationandtheConditionalOperators%5E1661). –

+0

@Petrichor, * Đã xảy ra lỗi khi xử lý yêu cầu của bạn *. – Sinatr

+7

@Sinatr Cập nhật liên kết: http://thebillwagner.com/Blog/Item/2015-07-05-StringInterpolationandtheConditionalOperators –

Trả lời

404

Theo documentation:

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

$ "{ <interpolation-expression> <optional-comma-field-width> <optional-colon-format> }"

Vấn đề là ruột kết được sử dụng để biểu thị định dạng, như

Console.WriteLine($"Time in hours is {hours:hh}") 

Vì vậy, tl; dr câu trả lời là: quấn có điều kiện trong ngoặc đơn.

var result = $"descending? {(isDescending ? "yes" : "no")}"; 
+2

Trớ trêu thay, tôi đã kết thúc việc chia nhỏ dòng để làm cho nó dễ đọc hơn. Nhưng, tôi nghĩ rằng có lẽ ai đó sẽ bị nhầm lẫn bởi điều này tại một số điểm (bản thân tôi, có thể). –

+41

Thậm chí trớ trêu thay hơn, khi bạn quên sử dụng dấu ngoặc đơn, Visual Studio nhấn mạnh dấu hai chấm và hiển thị lỗi "Colon expected". :) – Spook

+3

Câu hỏi thậm chí còn tốt hơn bởi vì không chỉ bạn trả lời câu hỏi rõ ràng, mà còn trả lời câu hỏi ngầm sau: giải pháp thay thế là gì. –

Các vấn đề liên quan