<p>遞歸模式在C# 9+中用于解構(gòu)復(fù)雜對(duì)象,支持屬性和位置匹配,適用于record類(lèi)型與switch表達(dá)式,可實(shí)現(xiàn)嵌套結(jié)構(gòu)的精準(zhǔn)匹配,提升代碼可讀性與安全性。</p>
在 C# 中,遞歸模式(Recursive Patterns)是 C# 9 及以上版本引入的一種強(qiáng)大功能,主要用于解構(gòu)復(fù)雜對(duì)象并檢查其內(nèi)部結(jié)構(gòu)。它常用于 switch
表達(dá)式、is
表達(dá)式中,特別適合處理嵌套的對(duì)象或記錄類(lèi)型。
遞歸模式的基本形式是:
類(lèi)型(模式) 或者 類(lèi)型 { 屬性模式 }
它可以結(jié)合屬性解構(gòu)和嵌套模式來(lái)匹配對(duì)象的結(jié)構(gòu)。
C# 的 record
類(lèi)型天然支持解構(gòu),非常適合遞歸模式。例如:
public record Person(string Name, int Age, Address Address);
public record Address(string City, string Country);
var person = new Person("Alice", 30, new Address("Beijing", "China"));
if (person is Person { Name: "Alice", Address: Address { City: "Beijing" } })
{
????Console.WriteLine("匹配成功");
}
這里通過(guò) Person { Address: Address { City: "Beijing" } }
實(shí)現(xiàn)了對(duì)嵌套對(duì)象的遞歸匹配。
無(wú)階未來(lái)模型擂臺(tái)/AI 應(yīng)用平臺(tái),一站式模型+應(yīng)用平臺(tái)
遞歸模式在 switch
表達(dá)式中也非常實(shí)用:
string result = person switch
{
????Person { Name: var name, Age: < 18 } => $"{name} 是未成年人",
????Person { Name: var name, Address: Address { Country: "China" } } => $"{name} 來(lái)自中國(guó)",
????_ => "其他情況"
};
這個(gè)例子中,根據(jù)年齡和地址信息進(jìn)行分層判斷,邏輯清晰且代碼簡(jiǎn)潔。
如果類(lèi)型定義了 Deconstruct
方法,也可以用位置模式:
public class Point
{
????public int X { get; set; }
????public int Y { get; set; }
????public void Deconstruct(out int x, out int y) => (x, y) = (X, Y);
}
var point = new Point { X = 1, Y = 2 };
if (point is (1, 2))
{
????Console.WriteLine("點(diǎn)位于 (1, 2)");
}
這種寫(xiě)法也屬于遞歸模式的一種,可用于自定義類(lèi)型的解構(gòu)匹配。
基本上就這些。遞歸模式讓 C# 的模式匹配更接近函數(shù)式語(yǔ)言的風(fēng)格,尤其配合 record
和不可變數(shù)據(jù)時(shí),代碼更安全、易讀。只要類(lèi)型支持屬性訪(fǎng)問(wèn)或解構(gòu),就能用遞歸模式層層深入匹配。不復(fù)雜但容易忽略細(xì)節(jié),比如屬性名拼寫(xiě)、類(lèi)型一致性等。
以上就是C# 中的模式匹配遞歸模式如何用法?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)