【譯】C#中優(yōu)雅的字符串處理,特殊插值符

開發(fā)程序過程中择懂,去處理格式化的內(nèi)容輸出是很常見的,無論你開發(fā)控制臺程序另玖,Web應(yīng)用還是移動開發(fā)都有類似的場景困曙。
C#6中微軟引入了新的字符串操作符($)幫助開發(fā)者們簡單的操作字符串文本。
本文中谦去,我用幾個例子幫助理解這個操作符慷丽。
我們想下這個例子,兩個數(shù)相加并打印它們的結(jié)果鳄哭。非常簡單的例子要糊,下面是C#中老的實現(xiàn)方式

打開https://try.dot.net/ 這個C#的在線編譯工具,可以看運行結(jié)果妆丘。 后面的例子都可以復(fù)制內(nèi)容編輯器锄俄,然后點Run查看運行結(jié)果。


using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    int a = 2, b = 3, sum = a + b;
    Console.Write("The sum of " + a + " and " + b + " is " + sum);
  }
}

這個代碼輸出如下內(nèi)容
The sum of 2 and 3 is 5

我相信大多數(shù)人不會同意這個代碼勺拣,因為字符拼接總是痛苦的珊膜,有更好的選擇。讓我們使用 String.format 來組織代碼


using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    int a = 2, b = 3, sum = a + b;
    Console.Write(String.Format("The sum of {0} and {1} is {2}", a, b, sum));
  }
}

對于大多數(shù)開發(fā)人員來說宣脉,這是首選方法(在 C# 6 之前)。它生成的輸出與前面的語句完全相同剔氏。

我相信塑猖,當(dāng)處理相對較大的字符串和更多的參數(shù)時,這也是痛苦的谈跛。參數(shù)的順序和在代碼塊中的使用總是從開發(fā)人員那里竊取一些時間羊苟。插值特殊字符 ($) 可幫助開發(fā)人員以更好的方式編寫代碼。

請考慮以下示例感憾。


using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    int a = 2, b = 3, sum = a + b;
    Console.Write($"The sum of {a} and 蜡励 is {sum}");
  }
}

此代碼還會生成與前兩個完全相同的結(jié)果。您會注意到代碼是多么容易和可讀阻桅。$ 符號使字符串成為可插值的字符串凉倚。解析后,大括號 ({}) 內(nèi)的表達(dá)式將被相應(yīng)的表達(dá)式結(jié)果替換嫂沉』酷!趟章。

下面的示例杏糙。


using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    Console.Write($"Today is {DateTime.Now.ToShortDateString()}");
  }
}

會產(chǎn)生如下結(jié)果

Today is 8/10/2019

您可以將 $ 和 + 運算符組合在一個字符串中慎王。請參閱以下示例


using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    
        String Username = "Mark Smith";

        Decimal amount = 89.560m;

        Console.Write($@"<pre>Dear {Username},Your Total Due for this month is {amount}.

        Please settle the amount at the earliest.

        </pre>");
  }
}

此外,還可以指定字符串應(yīng)保留的最小空格數(shù)宏侍。默認(rèn)情況下赖淤,文本右對齊,對齊參數(shù)的負(fù)值將使其左對齊谅河。

下面的示例咱旱。


using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    
        
        Console.Write($@"<pre>

        9 x 1 = {9 * 1,2}

        9 x 2 = {9 * 2,2}

        9 x 3 = {9 * 3,2}

        </pre>");
  }
}

輸出的結(jié)果是

9 x 1 = 9

9 x 2 = 18

9 x 3 = 27

請參閱結(jié)果的對齊方式 (9,18旧蛾,27)莽龟,它是右對齊。如果使用 -2锨天,它將保持左對齊狀態(tài)毯盈。

還可以使用格式表達(dá)式設(shè)置表達(dá)式的格式。請考慮以下示例


using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
        Console.Write($"Today is {DateTime.Now: yyyy MM dd dddd}");
  }
}

將會產(chǎn)生如下結(jié)果
Today is 2019 08 26 Monday

總結(jié)
插值特殊字符($)將幫助開發(fā)人員以更簡單病袄、更靈活的方式操作字符串搂赋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市益缠,隨后出現(xiàn)的幾起案子脑奠,更是在濱河造成了極大的恐慌,老刑警劉巖幅慌,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宋欺,死亡現(xiàn)場離奇詭異,居然都是意外死亡胰伍,警方通過查閱死者的電腦和手機齿诞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骂租,“玉大人祷杈,你說我怎么就攤上這事∩” “怎么了但汞?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長互站。 經(jīng)常有香客問我私蕾,道長,這世上最難降的妖魔是什么胡桃? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任是目,我火速辦了婚禮,結(jié)果婚禮上标捺,老公的妹妹穿的比我還像新娘懊纳。我一直安慰自己揉抵,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布嗤疯。 她就那樣靜靜地躺著冤今,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茂缚。 梳的紋絲不亂的頭發(fā)上戏罢,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音脚囊,去河邊找鬼龟糕。 笑死,一個胖子當(dāng)著我的面吹牛悔耘,可吹牛的內(nèi)容都是我干的讲岁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼衬以,長吁一口氣:“原來是場噩夢啊……” “哼缓艳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起看峻,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤阶淘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后互妓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溪窒,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年冯勉,在試婚紗的時候發(fā)現(xiàn)自己被綠了澈蚌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡珠闰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘫辩,到底是詐尸還是另有隱情伏嗜,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布伐厌,位于F島的核電站承绸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挣轨。R本人自食惡果不足惜军熏,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卷扮。 院中可真熱鬧荡澎,春花似錦均践、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至或衡,卻和暖如春焦影,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背封断。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工斯辰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坡疼。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓彬呻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親回梧。 傳聞我的和親對象是個殘疾皇子废岂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容