欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你深入了解C#中的特殊字符

 更新時間:2024年01月30日 10:03:47   作者:goyeer  
特殊字符是預(yù)定義的上下文字符,用于修飾最前面插入了此類字符的程序元素,C#支持以下特殊字符:@和$,本文將通過代碼示例帶大家深入了解C#中的特殊字符,感興趣的小伙伴跟著小編一起來看看吧

一、概述

特殊字符是預(yù)定義的上下文字符,用于修飾最前面插入了此類字符的程序元素(文本字符串,標(biāo)識符或?qū)傩悦Q)。C#支持以下特殊字符:

  • @:逐字字符串標(biāo)識符字符
  • $: 內(nèi)插入字符串字符

二、$-- 字符串內(nèi)插

$ 字符將字符串字面量標(biāo)識為內(nèi)插字符串。 內(nèi)插字符串是可能包含內(nèi)插表達式的字符串文本 。 將內(nèi)插字符串解析為結(jié)果字符串時,帶有內(nèi)插表達式的項會替換為表達式結(jié)果的字符串表示形式。

字符串內(nèi)插為格式化字符串提供了一種可讀性和便捷性更高的方式。它比字符串復(fù)合格式設(shè)置更容易。

public static void Main(string[] arg)
{
    var name = "Mark";
    var date = DateTime.Now;
    Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);
    Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
}

從C#10開始,可以使用內(nèi)插字符串來初始化常量字符串。僅當(dāng)內(nèi)插字符串中的所有內(nèi)插表達式也是常量字符串時,才可以執(zhí)行此操作。

2.1 內(nèi)插字符串的結(jié)構(gòu)

若要將字符串標(biāo)識為內(nèi)插字符串,可在該字符串前面加上$符號。字符串字面量開頭的$"之間不能有任何空格。

具備內(nèi)插表達式的項的結(jié)構(gòu)如下所示:

{<interpolationExpression>[,<alignment>][:<formatString>]}
  1. interpolationExpression 生成需要設(shè)置格式的結(jié)果的表達式。null的字符串表示形式為String.Empty。
  2. alignment 常數(shù)表達式,它的值定義表達式結(jié)果的字符串表示形式中的最小字符數(shù)。 如果值為正,則字符串表示形式為右對齊;如果值為負,則為左對齊。
  3. formatString 受表達式結(jié)果類型支持的格式字符串。
public static void Main(string[] arg)
{
   Console.WriteLine($"|{"Left",-7}|{"Right",7}|");
   const int FieldWidthRightAligned = 20;
   Console.WriteLine($"{Math.PI,FieldWidthRightAligned} - default formatting of the pi number");
   Console.WriteLine($"{Math.PI,FieldWidthRightAligned:F2} - display only three decimal digits");
}

從 C# 11 開始,可以在內(nèi)插表達式中使用換行符,以使表達式的代碼更具可讀性。

下面的示例展示了換行符如何提高涉及模式匹配的表達式的可讀性:

public static void Main(string[] arg)
{
   var safetyScore = 80;
   string message = $"The usage policy for {safetyScore} is" +
          $" {safetyScore switch
                 {
                     > 90 => "Unlimited usage",
                     > 80 => "General usage, with daily safety check",
                     > 70 => "Issues must be addressed within 1 week",
                     > 50 => "Issues must be addressed within 1 day",
                     _ => "Issues must be addressed before continued use",
                 }}";
   Console.WriteLine(message);
}

2.2 內(nèi)插原始字符串字面量

從C# 11開始,可以使用內(nèi)插原始字符串字面量。如以下示例所示:

int X=2;
int Y=3;
var pointMessage = $"""The point"{X},{Y}" is {Math.Sqrt(X*X+Y*Y):F3} from the origin""";
Console.WriteLine(pointMessage);

要在結(jié)果字符串嵌入{}字符,請讓內(nèi)插原始字符串字面量以多個$字符開頭。執(zhí)行此操作時,任何長度短$字符數(shù)的{}字符序列都會嵌入到結(jié)果字符串中。若要將任何內(nèi)插表達式包含該字符串中,需要使用與$字符數(shù)相同的大括號數(shù)。

如以下示例所示:

int X = 2;
int Y = 3;

var pointMessage = $$"""{The point {{{X}}, {{Y}}} is {{Math.Sqrt(X * X + Y * Y):F3}} from the origin}""";
Console.WriteLine(pointMessage);

內(nèi)插原始字符串字面量以兩個$字符開頭。需要將每個內(nèi)插表達式放在雙大括號{{}}之間。單個大括號嵌入到結(jié)果字符串中,如果需要重復(fù)的{}字符嵌入結(jié)果字符串中,請使用相應(yīng)增加的$字符數(shù)來指定內(nèi)插原始字符串字面量。

2.3 特殊字符

要在內(nèi)插字符串生成的文本中包含大括"{“或”}",請使用兩個大括號,即“{{”或“}}”。有關(guān)詳細信息。

因為冒號(“:”)在內(nèi)插表達式中具有特殊含義,為了在內(nèi)插表達式使用條件運算符,請將表達式放在括號內(nèi)。

下面示例演示了如何在結(jié)果字符串中包含大括號。下面示例演示如何使用條件運算符:

string name = "Horace";
int age = 34;
Console.WriteLine($"He asked, \"Is your name {name}?\", but didn't wait for a reply :-{{");
Console.WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old.");

內(nèi)插逐字字符串以$@字符開頭??梢园慈我忭樞蚴褂?code>$和@: $@"..."@$"..."均為有效的內(nèi)插逐字字符串。

2.4 內(nèi)插字符串編譯

從C#10和.NET 6開始,編譯器會檢查內(nèi)插字符串是否被分配給滿足內(nèi)插字符串處理程序模式要求的類型。內(nèi)插字符串處理程序是一種內(nèi)插字符串轉(zhuǎn)換為結(jié)果字符串的類型。當(dāng)內(nèi)插字符串的類型為string時,它由System.Runtime.CompilerServices.DefaultInterpolatedStringHandle處理。

在C# 10之前,如果內(nèi)插字符串類型為String,則通常將其轉(zhuǎn)換為String.Format方法調(diào)用。如果分析的行為等同于串聯(lián),則編譯器可將String.Format替換為String.Concat。

如果內(nèi)插字符串類型為IFormattable或FormattableString,則編譯器會生成對FormattableStringFactory.Create方法的調(diào)用。

三、@-- 逐字字符串標(biāo)識符

@特殊字符用作原義標(biāo)識符。通過以下方式使用它:

  • 指示將原義解釋字符串。@字符在此實例中定義原義標(biāo)識符。簡單轉(zhuǎn)義序列、十六進制轉(zhuǎn)義序列和Unicode轉(zhuǎn)義序列都將字面解釋。只有引號轉(zhuǎn)義序列(“”)不會被字面解釋;因為它生成一個雙引號。此外。如果是逐字內(nèi)插字符串,大括號轉(zhuǎn)義序列({{}})不按字面解釋;它們會生成單個大括號字符。
string filename1 = @"c:\documents\files\u0066.txt";
string filename2 = "c:\\documents\\files\\u0066.txt";
Console.WriteLine(filename1);
Console.WriteLine(filename2);
  • 使用C#關(guān)鍵字作為標(biāo)識符。@字符可作為代碼元素的前綴,編譯器將把此代碼元素解釋為標(biāo)識符而非C#關(guān)鍵字。
string[] @for={"John","James","Joan","Jamie"};
for(int ctr = 0; ctr<@for.Length;ctr++)
{
    Console.WriteLine($"Here is your gift, {@for[ctr]}!");
}
  • 使編譯器在命名沖突的情況下區(qū)分兩種屬性。屬性是派生自Attribute的類。其類型名稱通常包含后綴Attribute,但編譯器不會強制進行轉(zhuǎn)換。

四、“”“–原始字符串文本

原始字符串字面量以至少三個雙引號()字符開始和結(jié)束:

var singleLine = """This is a "raw string literal". It can contain characters like \, ' and ".""";

原始字符串字面量可以包含多行:

var xml = """
        <element attr="content">
            <body>
            </body>
        </element>
        """;

以下規(guī)則控制多行原始字符串字面量的解釋:

  • 左引號和右引號字符必須位于各自的行中
  • 右引號左側(cè)的任何空格將從原始字符串字面量的所有行中刪除。
  • 將忽略同一行中左引號后面的空格。
  • 字符串字面量中僅包含左引號后面的空格行

可能需要創(chuàng)建包含三個或更多連續(xù)雙引號字符的原始字符串字面量。 原始字符串字面量可以至少三個雙引號字符的序列開始和結(jié)束。 如果字符串字面量包含三個連續(xù)雙引號,則以四個雙引號字符開始和結(jié)束原始字符串字面量:

var moreQuotes = """" As you can see,"""Raw string literals""" can start and end with more than three double-quotes when needed."""";

原始字符串字面量還可以與內(nèi)插字符串結(jié)合使用,以在輸出字符串中嵌入{}字符。在內(nèi)插的原始字符串字面量中使用多個$字符,以在輸出字符串中嵌入{}字符,而無需對這些字符進行轉(zhuǎn)義。

到此這篇關(guān)于一文帶你深入了解C#中的特殊字符的文章就介紹到這了,更多相關(guān)C#特殊字符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論