C#集合之不變集合的用法
如果對象可以改變其狀態(tài),就很難在多個同時運行的任務(wù)中使用。這些集合必須同步。如果對象不能改變器狀態(tài),就很容易在多個線程中使用。
Microsoft提供了一個新的集合庫:Microsoft Immutable Collection。顧名思義,它包含不變的集合類————創(chuàng)建后不能改變的集合類。該類在System.Collection.Immutable中定義。
//使用靜態(tài)的Create方法創(chuàng)建該數(shù)組,Create方法被重載,可以傳遞任意數(shù)量的元素
ImmutableArray<string> a1 = ImmutableArray.Create<string>();
//Add 方法不會改變不變集合本身,而是返回一個新的不變集合
ImmutableArray<string> a2 = a1.Add("Williams");
//可以一次調(diào)用多個Add方法
ImmutableArray<string> a3 = a2.Add("Ferrari").Add("Mercedes").Add("Red Bull Racing");
foreach (var item in a3)
{
Console.WriteLine(item);
}在使用不變數(shù)組的每個階段,都沒有復(fù)制完整的集合。相反,不變類型使用了共享狀態(tài),僅在需要時復(fù)制集合。
但是,先填充集合,再將它變成不變的數(shù)組會更高效(使用ToImmutableList方法)。需要進(jìn)行一些處理時,可以再變?yōu)榭勺兊募希ㄊ褂肨oBuilder方法)。使用不變集合的提供的構(gòu)建器ImmutableList<Account>.Builder。
List<Account> accounts = new List<Account>() {
new Account {
Name = "Scrooge McDuck",
Amount = 667377678765m
},
new Account {
Name = "Donald Duck",
Amount = -200m
},
new Account {
Name = "Ludwig von Drake",
Amount = 20000m
}};
ImmutableList<Account> immutableAccounts = accounts.ToImmutableList();
ImmutableList<Account>.Builder builder = immutableAccounts.ToBuilder();
for (int i = 0; i < builder.Count; i++)
{
Account a = builder[i];
if (a.Amount > 0)
{
builder.Remove(a);
}
}
ImmutableList<Account> overdrawnAccounts = builder.ToImmutable();
foreach (var item in overdrawnAccounts)
{
Console.WriteLine("{0} {1}", item.Name, item.Amount);
}
public class Account
{
public string Name { get; set; }
public decimal Amount { get; set; }
}只讀集合(http://www.dhdzp.com/article/244084.htm)提供了集合的只讀視圖。在不使用只讀視圖訪問集合的情況下,該集合仍可以修改。而永遠(yuǎn)不能改變不變的集合。
到此這篇關(guān)于C#集合之不變集合的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c# DateTime常用操作實例(datetime計算時間差)
字符串操作DateTime操作,datetime計算時間差,取當(dāng)前時間,更多方法看下面代碼2013-12-12
C#讀取多條數(shù)據(jù)記錄導(dǎo)出到Word之圖片輸出改造
這篇文章主要為大家詳細(xì)介紹了C#讀取多條數(shù)據(jù)記錄并導(dǎo)出到Word標(biāo)簽?zāi)0逯械膱D片輸出問題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-11-11
unity自帶尋路(導(dǎo)航)系統(tǒng) Nav Mesh導(dǎo)航網(wǎng)格
這篇文章主要為大家詳細(xì)介紹了unity自帶尋路(導(dǎo)航)系統(tǒng),Nav Mesh導(dǎo)航網(wǎng)格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11

