C#的這個語法是在哪一個版本出現的?

本來我寫的是

DateTime.Now.ToString("yyMMdd")

然後 Resharper 提示我使用 Format Specifier

然後就變成了下面的樣子

$"{DateTime.Now:yyMMdd}"

這個語法是那個版本加入C#的呢?

還有其他類似的可以用到這個糖的地方嗎?


應該是 C#6 新的 String.Format 吧

// pre C#6
var now = String.Format("{0:yyMMdd}", DateTime.Now);
// C#6
var now = $"{DateTime.Now:yyMMdd}";

題主大約沒有注意到兩邊的引號和括弧


什麼,還能這麼寫?


題主看錯了,其實是這個用法。

輪子哥當時就蒙逼了。。。


其實7.0的有些寫法更爽


剛才試了一下……

應該是對.NET里自帶的支持ToString帶參的類有效

比如:

根據 @石博天 的回答,自己的類里這麼這麼寫是沒有用的,而我翻了一下.NET源碼,並沒有發現ToString有什麼特殊的Attribute,所以目測就是編譯器內置的支持……

另外只在format這個語法糖里有用。

---更新---

剛剛測試,對於實現了IFormattable的對象有效,會調用ToString(string format,IFormatter formatProvider)方法,第一個參數傳冒號後面的信息,第二個參數傳null:

相當於一個似乎有點用的語法糖吧,感覺自己的類里用的不多,主要還是對.NET的float、double、TimeSpan、DateTime等等類。


這個把點去了就是obj-c的語法了。


就我覺得這麼寫很不美麗么,我第一次看到同事這麼寫,確認了兩遍我看的是不是cs文件


結果:

a=160829

b=160829

c 編譯錯誤

d 編譯錯誤

e 直接返回了一個對象,可見想要吃到這個糖,並不是繼承ToString。而且Base的ToString是不帶參數的所以並不能說是繼承。


就算可以,至少也要有引號吧,要不怎麼區分變數


這個語法我喜歡!


按照修改後的題目,vs告訴了我們答案。。

-------------------------------------------------------------------------

並不能。。好奇題主的版本。。


補充一個,Timespan.TotalMilliseconds似乎也可以這麼用,比如(DateTime.Now-startTime).TotalMilliseconds:F0,表示0位浮點數


平行宇宙?


???C#5反正不能這麼寫


這很方便,但是很不好看


DateTime.Now.Parse("yyyyddMM").ToString("yyyyddMM");


是powershell的代碼吧。


推薦閱讀:

為什麼 C# 應用這麼少?
如何進一步提升自己的能力?
C#初學者怎樣系統高效地用MSDN?
做坦克射擊的遊戲,怎麼樣能讓AI打的不那麼准?
.net沒落了嗎?

TAG:C# | 語法糖 | C#編程 |