最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# $字符串插值的使用

 更新時(shí)間:2025年07月27日 10:31:12   作者:三叔 Tuncle  
本文介紹了C#中的字符串插值功能,詳細(xì)介紹了使用$符號(hào)的實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

$ 字符

字符串插值(String Interpolation)有許多的實(shí)現(xiàn)方式,其中使用 $ 字符在現(xiàn)代 C# 中時(shí)比較推薦的方式,它提供類似于 String.Format 的效果。

實(shí)際根據(jù) $ 使用場(chǎng)景的不同,編譯器會(huì)選擇用不同的方式實(shí)現(xiàn)字符串插值,String.Format 只是其中一種,具體見(jiàn) 實(shí)現(xiàn)細(xì)節(jié)

如下分別為使用 $String.Format的示例:

int value = 3;
Debug.Log($"Value is {value}");
Debug.Log(String.Format("Value is {0}", value));

輸出結(jié)果為:

Value is 3
Value is 3

使用方式

創(chuàng)建內(nèi)插字符串

字符串插值(String Interpolation) 是用來(lái)將表達(dá)式插入到字符串中的方式,簡(jiǎn)單的示例如下所示:

string name = "wxj";
Debug.Log($"Hello,{name}.");

輸出結(jié)果為:

Hello,wxj.

其中 $"Hello,{name}.") 被稱為 內(nèi)插字符串表達(dá)式(interpolated string expression)(下簡(jiǎn)稱 內(nèi)插表達(dá)式),最后輸出的 Hello,wxj. 被稱為 結(jié)果字符串(result string)

由上例可以看出字符串插值的兩個(gè)必要因素:

  1. 在字符串前需要有 $ 字符標(biāo)記,且該字符與后續(xù)的 " 間不能有空格。
  2. 在內(nèi)插表達(dá)式內(nèi)部可以有一個(gè)或多個(gè) {} ,其中包含著任何返回結(jié)果的 C# 表達(dá)式,表達(dá)式的返回值也可以為 null。

包含不同的數(shù)據(jù)類型

對(duì)于內(nèi)插表達(dá)式中的各 C# 表達(dá)式可以是任何類型的,如下所示:

var item = (Name: "eggplant", Price: 1.99m, perPackage: 3);
var date = DateTime.Now;
Debug.Log($"On {date}, the price of {item.Name} was {item.Price} per {item.perPackage} items.");

輸出結(jié)果為:

On 12/10/2021 8:26:07 AM, the price of eggplant was 1.99 per 3 items.

可以看到該內(nèi)插字符串表達(dá)式中包含有各種類型的表達(dá)式(stringDecimal,int,DeltaTime),在最終的結(jié)果中都被正確的解析。

內(nèi)插字符串表達(dá)式,各表達(dá)式都會(huì)被轉(zhuǎn)換為 string,且規(guī)則如下:

  1. 如果表達(dá)式結(jié)果為 null ,將其轉(zhuǎn)換為空字符串。
  2. 如果表達(dá)式結(jié)果不為 null,對(duì)其調(diào)用 ToString 函數(shù)。

控制內(nèi)插表達(dá)式的格式

在內(nèi)插表達(dá)式中,還可以控制各表達(dá)式轉(zhuǎn)換到 string 時(shí)的格式,如下所示:

DateTime date = DateTime.Now;
float value = 1.12345678f;
Debug.Log($"On {date}, value is {value}");
Debug.Log($"On {date:d}, value is {value:f3}");

輸出結(jié)果為:

On 12/10/2021 8:39:56 AM, value is 1.123457
On 12/10/2021, value is 1.123

在內(nèi)插表達(dá)式中的各表達(dá)式中可以通過(guò) : 后加控制的字符格式化輸出。如上例中的 df3 即為控制字符。

: 后的控制字符,相當(dāng)于在調(diào)用 ToString 時(shí)作為形參控制表達(dá)式的輸出。
上述表達(dá)式等同于:

Debug.Log("On " + date.ToString("d") + ", value is " + value.ToString("f3"));

控制內(nèi)插表達(dá)式的對(duì)齊方式

在內(nèi)插表達(dá)式中的個(gè)表達(dá)式中可以通過(guò) , 后加數(shù)字來(lái)控制字符寬度和對(duì)其方式,如下所示:

var inventory = new Dictionary<string, int>()
{
    ["hammer, ball pein"] = 14,
    ["hammer, ball pein a"] = 18,
    ["hammer, cross pein"] = 5,
    ["screwdriver, Phillips #2"] = 14
};

string result = $"|{"Item",-25}|{"Quantity",10}|\n";
foreach (var item in inventory)
    result += $"|{item.Key,-25}|{item.Value,10}|\n";

Debug.Log(result);

輸出結(jié)果為:

|Item                     |  Quantity|
|hammer, ball pein        |        14|
|hammer, ball pein a      |        18|
|hammer, cross pein       |         5|
|screwdriver, Phillips #2 |        14|

其中逗號(hào)后的數(shù)字,如果為負(fù)數(shù),則輸出為左對(duì)齊,如果為正數(shù)則右對(duì)齊。數(shù)字本身表示最少的字符數(shù)。因此如果顯示系統(tǒng)中每個(gè)字符的寬度是不相等的話,如 ia 的寬度在某些顯示系統(tǒng)下會(huì)有較大差異,則即使控制字符寬度也無(wú)法實(shí)現(xiàn)對(duì)其的效果。

如下為相同輸出結(jié)果在 Unity 的 Console 面板中的展示:

表達(dá)式格式和對(duì)齊方式也可以一起設(shè)定,但需要首先設(shè)定對(duì)其方式,再設(shè)定格式。如下首先控制了左對(duì)齊,且字符數(shù)為 10 個(gè),又設(shè)定輸出格式為當(dāng)前小時(shí)數(shù):

Debug.Log($"[{DateTime.Now,-10:HH}]");

結(jié)果為:

[10        ]

內(nèi)插表達(dá)式中使用轉(zhuǎn)義序列

如果要在內(nèi)插表達(dá)式中可以使用轉(zhuǎn)義序列,當(dāng)需要多次使用轉(zhuǎn)義序列時(shí)也可使用 原義標(biāo)識(shí)符@ 替代。

如下所示,分別使用使用了轉(zhuǎn)義序列和原文標(biāo)識(shí)符:

string userName = "wxj";
string stringWithEscapes = $"C:\\Users\\{userName}\\Documents";
string verbatimInterpolated = $@"C:\Users\{userName}\Documents";
Debug.Log(stringWithEscapes);
Debug.Log(verbatimInterpolated);

輸出結(jié)果為:

C:\Users\wxj\Documents
C:\Users\wxj\Documents

C# 8.0 后,$ 與 @ 的先后順序不會(huì)造成任何影響。在早期版本中,必須先寫(xiě) $ 再寫(xiě) @。

在內(nèi)插表達(dá)式中,如果需要輸入 {,則按如下方式處理:

int[] values = new int[] { 1, 2 };
Debug.Log($"Value is {{{values[0]}, {values[1]}}}");

輸出結(jié)果為:

Value is {1, 2}

也可以通過(guò) $@ 的結(jié)合控制換行,如下:

var publishDate = new DateTime(2017, 12, 14);
string str = $@"This post published on {publishDate:yyyy-MM-dd} is about
interpolated strings.";
Debug.Log(str);

此時(shí)輸出為:

This post published on 2017-12-14 is about
interpolated strings.

內(nèi)插表達(dá)式中使用 ?: 運(yùn)算符

因?yàn)?: 在內(nèi)插表達(dá)式中用來(lái)指定格式,因此當(dāng)使用 ?: 運(yùn)算符時(shí),必須定義在括號(hào)內(nèi)。如下所示:

System.Random random = new System.Random();
for (int i = 0; i != 3; ++i)
{
    Debug.Log($"Value is {(random.Next() % 2 == 1 ? "Odd" : "Even")}");
}

輸出結(jié)果為:

Even
Odd
Odd

實(shí)現(xiàn)細(xì)節(jié)

根據(jù) $ 的實(shí)現(xiàn)方式的不同,編譯器會(huì)選擇用不同的方式實(shí)現(xiàn)字符串插值。

string.Concat

當(dāng)插值的對(duì)象為類型為 string 時(shí),編譯器會(huì)選擇使用 string.Concat。

如下代碼:

string name = "meziantou";
string hello = $"Hello {name}!";

編譯器會(huì)將其轉(zhuǎn)換為:

string name = "meziantou";
string hello = string.Concat("Hello ", name, "!");

string.Format

如果插值的對(duì)象為類型為非 string 時(shí),編譯器會(huì)選擇使用 string.Format。

如下代碼:

DateTime now = DateTime.Now;
string str = $"It is {now}";

編譯器會(huì)將其轉(zhuǎn)換為:

DateTime now = DateTime.Now;
string str = string.Format("It is {0}", now);

FormattableString

如果插值的對(duì)象為類型為 Formattable String 時(shí),編譯器會(huì)選擇使用 FormattableStringFactory.Create 創(chuàng)建一個(gè)新的 FormattableString。

如下代碼:

object value1 = "Foo";
object value2 = "Bar";
FormattableString str = $"Test {value1} {value2}";

編譯器會(huì)將其轉(zhuǎn)換為:

object value1 = "Foo";
object value2 = "Bar";
FormattableString str = FormattableStringFactory.Create("Test {0} {1}", new object[] { value1, value2 });

當(dāng)真正需要使用該 string 時(shí),會(huì)調(diào)用 FormattableString.ToString 方法,將其轉(zhuǎn)換為 string。

constants(C# 10)

在 C# 10 中,支持將內(nèi)插表達(dá)式的結(jié)果作為常量。如下所示:

const string Username = "meziantou";
const string Hello = $"Hello {Username}!";

// In previous C# version, you need to use the following concat syntax
const string Hello2 = "Hello " + Username + "!";

Interpolated string handlers(C# 10)

C# 10 中針對(duì)高性能場(chǎng)景,引入了 InterpolatedStringHandlerArgument,具體見(jiàn):
String Interpolation in C# 10 and .NET 6 - .NET Blog (microsoft.com)

Reference

$ - string interpolation - C# reference | Microsoft Docs

String interpolation - C# tutorial | Microsoft Docs

String interpolation in C# | Microsoft Docs

Interpolated strings: advanced usages - Meziantou’s blog

到此這篇關(guān)于C# $字符串插值的使用的文章就介紹到這了,更多相關(guān)C# $字符串插值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#使用GUID(全局統(tǒng)一標(biāo)識(shí)符)

    C#使用GUID(全局統(tǒng)一標(biāo)識(shí)符)

    這篇文章介紹了C#使用GUID(全局統(tǒng)一標(biāo)識(shí)符)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#播放short或者byte類型的音頻

    C#播放short或者byte類型的音頻

    這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)播放short或者byte類型的音頻,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • 詳解C#中String.ToCharArray方法的使用

    詳解C#中String.ToCharArray方法的使用

    這篇文章主要為大家詳細(xì)介紹了C#中String.ToCharArray方法的使用的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C#靜態(tài)代碼織入AOP組件之Rougamo的使用詳解

    C#靜態(tài)代碼織入AOP組件之Rougamo的使用詳解

    Rougamo是一個(gè)靜態(tài)代碼織入的AOP組件,同為AOP組件較為常用的有Castle、Autofac、AspectCore等,下面就跟隨小編一起來(lái)學(xué)習(xí)一下它的具體使用吧
    2024-01-01
  • c#目錄操作示例(獲取目錄名稱 獲取子目錄)

    c#目錄操作示例(獲取目錄名稱 獲取子目錄)

    這篇文章主要介紹了c#目錄操作示例,包括獲取目錄名稱、獲取子目錄、查詢子目錄、將原目錄移動(dòng)到目標(biāo)目錄等操作,大家參考使用吧
    2014-01-01
  • C# 使用Winform 獲取下拉框 選中的值

    C# 使用Winform 獲取下拉框 選中的值

    這篇文章主要介紹了C# 使用Winform 獲取下拉框 選中的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • c#利用system.net發(fā)送html格式郵件

    c#利用system.net發(fā)送html格式郵件

    這篇文章主要介紹了c#利用system.net發(fā)送html格式郵件的示例,帶有抄送、密送、附件功能,需要的朋友可以參考下
    2014-02-02
  • C#中圖片、二進(jìn)制與字符串的相互轉(zhuǎn)換方法

    C#中圖片、二進(jìn)制與字符串的相互轉(zhuǎn)換方法

    這篇文章主要介紹了C#中圖片、二進(jìn)制與字符串的相互轉(zhuǎn)換方法,涉及C#針對(duì)不同數(shù)據(jù)類型的解析與轉(zhuǎn)換操作技巧,需要的朋友可以參考下
    2016-06-06
  • c# 反射用法及效率對(duì)比

    c# 反射用法及效率對(duì)比

    這篇文章主要介紹了c# 反射用法及效率對(duì)比,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#中結(jié)構(gòu)體和字節(jié)數(shù)組轉(zhuǎn)換實(shí)現(xiàn)

    C#中結(jié)構(gòu)體和字節(jié)數(shù)組轉(zhuǎn)換實(shí)現(xiàn)

    這篇文章主要介紹了C#中結(jié)構(gòu)體和字節(jié)數(shù)組轉(zhuǎn)換實(shí)現(xiàn),本文直接給出了字節(jié)數(shù)組與結(jié)構(gòu)體的轉(zhuǎn)換代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
    2015-06-06

最新評(píng)論

嵊州市| 安塞县| 奉新县| 林周县| 酉阳| 鄱阳县| 道孚县| 博罗县| 永州市| 平顶山市| 云安县| 邵阳市| 巴青县| 高陵县| 宜兴市| 安溪县| 马边| 渝中区| 正阳县| 运城市| 景宁| 溆浦县| 高清| 车致| 竹溪县| 安平县| 菏泽市| 高雄市| 蕲春县| 和田市| 万载县| 二连浩特市| 工布江达县| 改则县| 黑山县| 百色市| 尖扎县| 永泰县| 阳春市| 东丽区| 瓦房店市|