2017-08-15 30 views
0

我有這樣的代碼,其中該行內變量{ (hour > 12 ? "PM" : "AM") }混淆有關字符串插值在C#6.0

我創造它和它的作品,但我很困惑,因爲沒有括號()我有一些問題與代碼很多紅色下劃線那裏,感染編譯器代碼的建議重構它用紅色下劃線,但是換我表達()後,它的工作原理。

我只是想知道什麼是在這個插值內變量的()狀態?

WriteLine($"{hour}:{minout}:{seconds} { (hour > 12 ? "PM" : "AM") }"); 
+1

之前執行所有表達式只是爲了確保你提供一個例子,但真的不使用此代碼這樣 - '日期時間。 ToString(「HH:mm:ss tt」)是正確的方法。附: '12:00'是下午12點,而不是12點。 –

+0

感謝您的回覆。但我只是爲了演示目的而創建它。僅用於學習一些C#6和c#7功能。謝謝我會在我的項目中使用您的建議。謝謝 – BabarQB

回答

1

括號有表示表達式,其評估所需的第一,然後其結果是,將內插的串的輸入。

對於一個正規的方法,請看看下面的鏈接

Expressions和搜索術語括號的表達式本文檔中

關於插弦,你可以找到更多信息。但是,你必須牢記的一件事是它的結構:

$"<text> {<interpolated-expression> [,<field-width>] [<:format-string>] } <text> ..." 

在你的情況(...)是插值表達。

+0

感謝您response.But爲什麼代碼的建議不重構正確的方法。 – BabarQB

+0

@BabarQB歡迎您。就我所知道的重構建議而言,我可以說編譯器不能建議你所有可能的方式來重構你的代碼。當然,它可以發現許多常見模式,然後給你一個建議。但是,有很多其他模式,您不會從任何編譯器/或任何靜態分析工具獲得重構建議。 – Christos

5

:運營商是字符串格式化有效操作這串插使用

var date = new DateTime(2017, 8, 31); 
var stringDate = $"Date is {date:yyyy.MM.dd}"; // "Date is 2017.08.31" 

沒有括號:被視爲格式字符串,而不是有條件的經營者,所以對於使用條件運算符,你應該換你的條件表達插入語。

var stringDate = $"It is {(date.Hours > 12 ? "evening" : "morning")}"; 

另一種方法(或許更可讀)格式結果

var dayPart = date.Hours > 12 ? "evening" : "morning"; 
var stringDate = $"It is {dayPart}"; 
+0

我永遠無法理解爲什麼他們允許在那裏表達。我的意思是如果你以後需要它,你需要複製粘貼你的代碼。雖然使用計算變量(就像在第二種方法中一樣),但它至少可以重複使用,並且更具可讀性。 – Franck