C# Interpolated Strings 字串插值

TypeScript 有個好東西,Template String,輸出內嵌動態資料 HTML 時非常好用,例如:

var userName: string = "Jeffrey";
var iconUrl: string = "/imgs/runner.gif";
var html = `
<div>
    Hello, ${userName}! <img src="${iconUrl}" />
</div>`;
alert(html);

場景移到 C#,字串內含換行符號靠 @"…." (String Literal,字串常值)可輕鬆擺平,是 .NET 1.1 時代就有的老東西。TypeScript 在字串裡用 ${variable_name} 直接穿插變數的做法稱為 String Interpolation,C# 傳統上靠 string.Format("<div>Hello, {0}</div>", userName) 實現(術語為 Composite Format,複合格式)。C# 6.0 起新加入 Interpolated Strings(字串插值)特性,不需再用 string.Format() 就可直接混搭文字與變數。

使用 Interpolated String 時只需在雙引號前加上 $ 符號,即可在字串中大大方方以大括號夾入變數,例如:$"Hi, {userName}.",同時還可比照 string.Format(),以 :n0、:yyyy-MM-dd 指定格式,十分方便。不囉嗦,直接看範例:

    class Program
    {
        static void Main(string[] args)
        {
            //插入變數,比照string.Format可加上:n0,:yyyy-MM-dd等格式規範
            var userName = "Jeffrey";
            var score = 32767;
            var result = $"{userName}'s score is {score:n0}. {DateTime.Today:yyyy-MM-dd}";
            Console.WriteLine(result);
            //指定固定寬度
            var items = new string[] { "Notebook", "Phone", "PC" };
            foreach (var item in items)
            {
                Console.WriteLine($"{item, 12} checked.");
            }
            //加入邏輯運算,與@""混合使用以支援換行,用{{、}}代表{、}
            Console.WriteLine($@"
{{ {score} + 1 = {score + 1} }}
{score} is {(score % 2 == 0 ? "even":"odd")}
");
            Console.Read();
        }
    }

執行結果:

Jeffrey's score is 32,767. 2016-11-22
    Notebook checked.
       Phone checked.
          PC checked.

{ 32767 + 1 = 32768 }
32767 is odd

注意:Interpolated String 屬 C# 6.0 新增規格,Visual Studio 2015 起才支援(參考),如果你的專案開發環境仍停留在 Visual Studio 2013,看在可以少打好多字的份上,考慮升級吧!:P

歡迎推文分享:
Published 22 November 2016 06:06 AM 由 Jeffrey
Filed under:
Views: 14,926



意見

# PcLEE said on 09 January, 2017 08:17 PM

請問這個方式的記憶體使用是如

StringBuilder 先畫出一個稍微大一點的記憶體空間

還是和string += 一樣,每次的建立都是重新指派記憶體空間

# Jeffrey said on 10 January, 2017 12:32 AM

to PcLEE, Interpolated Strings 編譯後等同 String.Format("{0} {1}", arg0, arg1),而 String.Format 內部則使用StringBuilder 實作字串組裝。

# PcLEE said on 10 January, 2017 02:43 AM

謝謝您的回覆

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<November 2016>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication