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

C#中的原始字符串字面量全面解析

 更新時間:2025年12月09日 09:56:46   作者:唐青楓  
C# 11 引入了原始字符串字面量(Raw String Literals),這是一個革命性的特性,極大地簡化了包含大量特殊字符的處理,下面小編就和大家詳細介紹一下吧

簡介

C# 11 引入了原始字符串字面量(Raw String Literals),這是一個革命性的特性,極大地簡化了包含大量特殊字符(如引號、反斜杠、換行符等)的字符串處理。

原始字符串字面量允許創(chuàng)建包含任意文本的字符串,而無需轉(zhuǎn)義特殊字符。它們以至少三個雙引號 """ 開始和結(jié)束,并且可以跨越多行。

核心特性與優(yōu)勢

核心特點

  • 無轉(zhuǎn)義需求:不需要對引號、反斜杠等特殊字符進行轉(zhuǎn)義
  • 多行支持:原生支持多行字符串格式
  • 空白保留:精確保留源代碼中的縮進和格式化
  • 靈活分隔符:使用可變數(shù)量的雙引號作為分隔符
  • 字符串插值:可與插值語法無縫結(jié)合

與傳統(tǒng)字符串對比

特性常規(guī)字符串逐字字符串(@)原始字符串字面量
轉(zhuǎn)義需求需要轉(zhuǎn)義特殊字符不需要轉(zhuǎn)義,但對雙引號仍需轉(zhuǎn)義完全不需要轉(zhuǎn)義
多行支持需使用\n支持原生支持
縮進保留不保留保留所有縮進智能縮進處理
引號處理\"""直接使用
JSON/XML可讀性差可讀性中等完美呈現(xiàn)

基本語法

// 基本原始字符串
string basic = """這是一個原始字符串,不需要轉(zhuǎn)義 "引號" 和 \反斜杠""";

// 多行原始字符串
string multiLine = """
    這是一個
    多行原始字符串
    可以包含 "引號" 和 \反斜杠
    """;

// 包含大括號的原始字符串
string withBraces = """
    { "name": "John", "age": 30 }
    """;

核心特性與優(yōu)勢

無需轉(zhuǎn)義特殊字符

// 傳統(tǒng)方式(需要轉(zhuǎn)義)
string traditional = "這是一個包含\"引號\"和\\反斜杠的字符串";

// 原始字符串方式(無需轉(zhuǎn)義)
string raw = """這是一個包含"引號"和\反斜杠的字符串""";

// 正則表達式示例
string regexPattern = """^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$""";

多行字符串處理

// 傳統(tǒng)多行字符串(需要轉(zhuǎn)義和連接)
string oldMultiLine = "第一行\(zhòng)n" +
                     "第二行\(zhòng)n" +
                     "第三行";

// 原始多行字符串(更簡潔)
string newMultiLine = """
    第一行
    第二行
    第三行
    """;

// JSON 示例
string json = """
    {
        "name": "John Doe",
        "age": 30,
        "email": "john@example.com"
    }
    """;

縮進處理

原始字符串字面量會自動處理縮進,使代碼保持整潔:

string GetFormattedMessage()
{
    return """
        Hello,
            This is an indented message.
        It preserves the formatting exactly as written.
        """;
}

// 輸出結(jié)果:
// Hello,
//     This is an indented message.
// It preserves the formatting exactly as written.

引號數(shù)量規(guī)則

當字符串內(nèi)容包含三個或更多連續(xù)雙引號時,需要使用更多引號作為分隔符:

// 內(nèi)容包含三個雙引號 → 使用四個作為分隔符
string tripleQuotes = """" 這里可以包含 """ 三個引號 """";

// 內(nèi)容包含四個雙引號 → 使用五個作為分隔符
string fourQuotes = """"" 這里可以包含 """" 四個引號 """"";

引號數(shù)量選擇原則

  • 分隔符的雙引號數(shù)量(N)必須大于內(nèi)容中連續(xù)雙引號的最大數(shù)量(M)
  • 最小分隔符數(shù)量為3(即使內(nèi)容沒有三個引號)
  • 公式:N > M

多$符號規(guī)則

  • $ 的數(shù)量決定了插值表達式的邊界
  • 一個 $ → 表達式使用 { }
  • 兩個 $$ → 表達式使用 {{ }},以此類推

高級用法與技巧

包含更多引號

如果需要字符串中包含三個或更多連續(xù)雙引號,可以使用更多引號作為分隔符:

// 使用四個引號作為分隔符,以包含三個引號
string withTripleQuotes = """"
    這個字符串包含三個連續(xù)引號: """
    """";

// 使用五個引號作為分隔符,以包含四個引號
string withFourQuotes = """""
    這個字符串包含四個連續(xù)引號: """"
    """"";

與字符串插值結(jié)合使用

原始字符串可以與字符串插值結(jié)合使用,提供更強大的功能:

string name = "John";
int age = 30;

// 基本插值
string interpolated = $$"""
    {
        "name": "{{name}}",
        "age": {{age}}
    }
    """;

// 復(fù)雜插值(使用多個$符號)
string complex = $$$"""
    {
        "name": "{{{name}}}",  // 注意:這里需要三個大括號
        "age": {{age}}
    }
    """;

最小化縮進

原始字符串會自動去除與結(jié)束引號對齊的縮進:

string minimalIndent = """
    First line
    Second line
    Third line
    """; // 結(jié)束引號的縮進決定了最小縮進

// 等效于:
// "First line\nSecond line\nThird line"

實際應(yīng)用場景

JSON 和 XML 處理

// JSON 配置
string configJson = """
    {
        "appSettings": {
            "timeout": 30,
            "retryCount": 3,
            "apiUrl": "https://api.example.com"
        },
        "logging": {
            "level": "Information",
            "filePath": "logs/app.log"
        }
    }
    """;

// XML 文檔
string xmlDocument = """
    <?xml version="1.0" encoding="UTF-8"?>
    <catalog>
        <book id="bk101">
            <author>Gambardella, Matthew</author>
            <title>XML Developer's Guide</title>
            <genre>Computer</genre>
            <price>44.95</price>
            <publish_date>2000-10-01</publish_date>
            <description>An in-depth look at creating applications with XML.</description>
        </book>
    </catalog>
    """;

正則表達式模式

// 復(fù)雜的正則表達式(無需轉(zhuǎn)義反斜杠)
string emailPattern = """^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$""";
string phonePattern = """^(\+\d{1,3}\s?)?(\(\d{1,4}\)\s?)?\d{1,4}[\s.-]?\d{1,4}[\s.-]?\d{1,9}$""";

// 使用正則表達式
bool isValidEmail = Regex.IsMatch("test@example.com", emailPattern);

SQL 查詢

string sqlQuery = """
    SELECT 
        u.Id,
        u.Name,
        u.Email,
        COUNT(o.Id) AS OrderCount
    FROM Users u
    LEFT JOIN Orders o ON u.Id = o.UserId
    WHERE u.IsActive = 1
    GROUP BY u.Id, u.Name, u.Email
    HAVING COUNT(o.Id) > 0
    ORDER BY OrderCount DESC
    """;

代碼生成

string GenerateCSharpClass(string className, IEnumerable<string> properties)
{
    return $$"""
        public class {{className}}
        {
            {{string.Join("\n    ", properties.Select(p => $"public string {p} {{ get; set; }}"))}}
            
            public {{className}}()
            {
            }
            
            public override string ToString()
            {
                return $"{{
                    {{string.Join(", ", properties.Select(p => $"{p}={{{p}}}"))}}
                }}";
            }
        }
        """;
}

// 使用示例
string classCode = GenerateCSharpClass("Person", new[] { "FirstName", "LastName", "Age" });

總結(jié)

C# 11 的原始字符串字面量是一個強大的特性,它:

  • 消除轉(zhuǎn)義需求:無需轉(zhuǎn)義引號、反斜杠等特殊字符
  • 支持多行內(nèi)容:輕松創(chuàng)建多行字符串,保持格式
  • 智能縮進處理:自動處理縮進,使代碼更整潔
  • 與插值結(jié)合:支持字符串插值,創(chuàng)建動態(tài)內(nèi)容
  • 編譯時處理:無運行時性能開銷

適用場景:

  • JSON/XML/HTML 內(nèi)容:處理結(jié)構(gòu)化數(shù)據(jù)
  • 正則表達式:編寫復(fù)雜的模式匹配

SQL 查詢:編寫多行數(shù)據(jù)庫查詢

  • 代碼生成:創(chuàng)建模板化代碼
  • 文檔字符串:編寫格式化的文檔

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

相關(guān)文章

  • C# 數(shù)組實例介紹(圖文)

    C# 數(shù)組實例介紹(圖文)

    數(shù)組即是一組相同類型組合在一起,使用一個通用的名稱,通過分配的下標訪問的數(shù)據(jù)集合中的元素。
    2014-08-08
  • picturebox加載圖片的三種方法與網(wǎng)站驗證碼的抓取

    picturebox加載圖片的三種方法與網(wǎng)站驗證碼的抓取

    這篇文章主要介紹了picturebox加載圖片的三種方法與網(wǎng)站驗證碼的抓取,需要的朋友可以參考下
    2015-03-03
  • C#中命名空間的實現(xiàn)

    C#中命名空間的實現(xiàn)

    本文主要介紹了C#中命名空間的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-05-05
  • C#中==(雙等于號)與equals()區(qū)別詳解

    C#中==(雙等于號)與equals()區(qū)別詳解

    這兩種方式也是大家在日常編碼工作當中用的比較多的判斷方式,本文就詳細的介紹一下C# 雙等于號與equals()區(qū)別,方便大家理解
    2021-05-05
  • C#中HttpClient使用注意(預(yù)熱與長連接)

    C#中HttpClient使用注意(預(yù)熱與長連接)

    本文主要介紹了C#中HttpClient使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • c#的異或運算符介紹

    c#的異或運算符介紹

    這篇文章介紹了c#的異或運算符,有需要的朋友可以參考一下
    2013-11-11
  • C#將DataTable轉(zhuǎn)換成list的方法

    C#將DataTable轉(zhuǎn)換成list的方法

    這篇文章主要介紹了C#將DataTable轉(zhuǎn)換成list的方法,實例分析了DataTable轉(zhuǎn)換成list及數(shù)據(jù)分頁的技巧,需要的朋友可以參考下
    2015-01-01
  • 深入理解C#委托delegate的使用

    深入理解C#委托delegate的使用

    本文主要介紹了C#委托delegate的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • C# winfrom異步加載數(shù)據(jù)不影響窗體UI的操作方法

    C# winfrom異步加載數(shù)據(jù)不影響窗體UI的操作方法

    這篇文章主要介紹了C# winfrom 異步加載數(shù)據(jù)不影響窗體UI,在 WinForms 應(yīng)用程序中,如果數(shù)據(jù)加載是一個比較耗時的操作,直接在主線程中進行加載會導致 UI 凍結(jié),這是因為 WinForms 的 UI 是單線程的,主線程被阻塞時就無法處理其他 UI 相關(guān)的任務(wù)
    2024-12-12
  • C#借助Spire.Doc for .NET實現(xiàn)調(diào)整Word文檔頁眉和頁腳的高度

    C#借助Spire.Doc for .NET實現(xiàn)調(diào)整Word文檔頁眉和頁腳的高度

    在 Microsoft Word 文檔中手動調(diào)整頁眉和頁腳高度往往令人頭疼,本文將介紹一種使用 Spire.Doc for .NET 在 C# 中精確調(diào)整 Word 頁眉和頁腳高度的解決方案,有需要的小伙伴可以了解下
    2026-03-03

最新評論

仪陇县| 徐水县| 齐齐哈尔市| 自治县| 龙井市| 海宁市| 汉源县| 揭阳市| 普定县| 绵阳市| 铅山县| 龙游县| 图们市| 平遥县| 连山| 波密县| 乃东县| 建水县| 绵竹市| 义马市| 乌拉特前旗| 灵丘县| 阆中市| 惠安县| 隆林| 改则县| 新余市| 陵水| 临澧县| 顺义区| 岳池县| 博野县| 荣昌县| 安新县| 即墨市| 思南县| 丹阳市| 维西| 鄯善县| 错那县| 澎湖县|