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

如何在C#中使用只讀的 Collections

 更新時間:2021年04月10日 10:11:16   作者:碼農(nóng)讀書  
這篇文章主要介紹了如何在C#中使用只讀的 Collections,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下

集合 表示一組可用于獲取和存儲的對象,在 C# 中提供了兩種類型的集合。

  • 普通集合
  • 泛型集合

前者存在于 System.Collections 命名空間下,屬類型不安全的,后者存在于 System.Collections.Generic 命名空間下,屬類型安全的。

不可變對象 定義為一旦創(chuàng)建就不可變更的對象, 在 .NET Core 中就存在著這三大 IReadOnlyList,IReadOnlyDictionary 和 IReadOnlyCollection 不可變集合,這篇文章我們就來討論這些不可變集合以及在C#中如何使用。

三大只讀類型介紹

IReadOnlyCollection 表示一個只讀集合的基礎(chǔ)接口,它實(shí)現(xiàn)了 IEnumerable 接口,代碼定義如下:

    public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable
    {
        int Count { get; }
    }

IReadOnlyDictionary 表示一個字典的只讀形態(tài),它實(shí)現(xiàn)了基礎(chǔ)的只讀集合接口 IReadOnlyCollection, 下面的代碼展示了如何將 泛型字典 只讀化。

public IReadOnlyDictionary<string, string> Dictionary { get; } = new Dictionary<string, string>
        {
            { "1", "ABC" },
            { "2", "XYZ" },
            { "3", "PQR" },
        };

IReadOnlyList 表示一個列表的只讀形態(tài),值得注意的是 只讀集合 只能通過 index 訪問,如下代碼所示:

    [DefaultMember("Item")]
    public interface IReadOnlyList<out T> : IEnumerable<T>, IEnumerable, IReadOnlyCollection<T>
    {
        T this[int index] { get; }
    }

使用 IReadOnlyList 替換 List

接下來我們看一下如何使用 IReadOnlyList 替換 List 來實(shí)現(xiàn)列表的只讀化,考慮下面的類。

public class Author
{
   public int Id { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
}

假如你想從數(shù)據(jù)庫中返回 author 集合,使用如下代碼:

public static List<Author> GetAuthors()
{
   return new List<Author>
   {
       new Author
       {
           Id = 1,
           FirstName = "Joydip",
           LastName = "Kanjilal"
       },
       new Author
       {
           Id = 2,
           FirstName = "Steve",
           LastName = "Smith"
       }
    };
}

為了簡化,我省略了對數(shù)據(jù)庫繁瑣的操作,下面的代碼展示了如何在 Main 方法中調(diào)用 GetAuthors() 方法。

static void Main(string[] args)
{
    var authors = GetAuthors();
    Console.Read();           
}

顯而易見上面的這種 authors 集合是我們用的最多的可變集合,那現(xiàn)在的問題是如何阻止 authors 被修改呢?這里就可以使用 IReadOnlyList 來確保 GetAuthors() 方法返回的集合不可更變,做法就是將方法的返回值從 List<Author> 修改為 IReadOnlyList<Author>,如下代碼所示。

public static IReadOnlyList<Author> GetAuthors()
{
   return new List<Author>
   {
      new Author
      {
          Id = 1,
          FirstName = "Joydip",
          LastName = "Kanjilal"
      },
      new Author
      {
          Id = 2,
          FirstName = "Steve",
          LastName = "Smith"
      }
    };
}

接下來看一下 Main 下的 authors 是否有可添加的 Add() 方法?如下圖所示:

使用 IEnumberable 接口

不知道大家可否發(fā)現(xiàn),現(xiàn)存的只讀接口都繼承了 IEnumberable,這就意味著 IEnumberable 也是一種只讀形態(tài),如果你只需要對集合進(jìn)行迭代,那么就可以使用 IEnumberable 接口啦,如下代碼所示:

public void MyMethod(IEnumerable<Author> authors)
{
  foreach (Author author in authors)
  {
      //Write your code here
  }
}

如果需求不滿足,可以對 IEnumerable 繼續(xù)向下轉(zhuǎn)型,比如想對集合進(jìn)行索引訪問,那么可以轉(zhuǎn)成 IReadOnlyList 接口,盡量滿足 可用功能的最小化 ,改造后的代碼如下:

public void MyMethod(IReadOnlyList<Author> authors)
{
  int count = authors.Count;
  for(int index = 0; index < count; index++)
  {
      var author = authors[index];
      //Write your code here
  }
}

IEnumerable 是 .NET 較早版本可用于只讀集合形態(tài)的接口, 在 .NET Core 中提供了新的只讀接口可用于阻止集合的修改,不過值得注意的是,這些對數(shù)據(jù)提供只讀視圖的接口,本質(zhì)上來說也僅僅是高層的封裝而已。

以上就是如何在C#中使用只讀的 Collections的詳細(xì)內(nèi)容,更多關(guān)于C#中使用只讀的 Collections的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#歸并排序的實(shí)現(xiàn)方法(遞歸,非遞歸,自然歸并)

    C#歸并排序的實(shí)現(xiàn)方法(遞歸,非遞歸,自然歸并)

    C#歸并排序的實(shí)現(xiàn)方法(遞歸,非遞歸,自然歸并),需要的朋友可以參考一下
    2013-04-04
  • C#?在PDF中添加墨跡注釋Ink?Annotation的步驟詳解

    C#?在PDF中添加墨跡注釋Ink?Annotation的步驟詳解

    PDF中的墨跡注釋表現(xiàn)為徒手涂鴉式的形狀,該類型的注釋,可任意指定形狀頂點(diǎn)的位置及個數(shù),通過指定的頂點(diǎn),程序?qū)⑦B接各點(diǎn)繪制成平滑的曲線,下面通過C#程序代碼介紹下在pdf中添加注釋的步驟,感興趣的朋友一起看看吧
    2022-02-02
  • Unity攝像機(jī)移至某物體附近觀察此物體

    Unity攝像機(jī)移至某物體附近觀察此物體

    這篇文章主要為大家詳細(xì)介紹了Unity攝像機(jī)移至某物體附近,觀察此物體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C#?字典Dictionary的具體用法

    C#?字典Dictionary的具體用法

    本文主要介紹了C#?字典Dictionary的具體用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C#在線程中訪問ui元素的幾種實(shí)現(xiàn)方法

    C#在線程中訪問ui元素的幾種實(shí)現(xiàn)方法

    在C#中,特別是在Windows窗體(WinForms)或WPF應(yīng)用程序中,直接從非UI線程(如后臺工作線程)訪問UI元素通常是不被允許的,如果你需要在非UI線程中更新UI元素,本文給大家介紹了C#在線程中訪問ui元素的幾種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-07-07
  • 基于C#實(shí)現(xiàn)獲取本地磁盤目錄

    基于C#實(shí)現(xiàn)獲取本地磁盤目錄

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)獲取本地磁盤目錄的功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#中的匿名方法實(shí)例解析

    C#中的匿名方法實(shí)例解析

    這篇文章主要介紹了C#中的匿名方法,包括其由來、定義及用法等,需要的朋友可以參考下
    2014-09-09
  • C#中字符串的加密的源碼

    C#中字符串的加密的源碼

    C#中字符串的加密的源碼...
    2007-03-03
  • C# WinForm程序完全退出的問題解決

    C# WinForm程序完全退出的問題解決

    C# WinForm程序完全退出的問題解決,需要的朋友可以參考一下
    2013-05-05
  • C#中使用資源的方法分析

    C#中使用資源的方法分析

    這篇文章主要介紹了C#中使用資源的方法,較為詳細(xì)的對比分析了C#中使用資源的幾種常用方法,非常具有實(shí)用價值,需要的朋友可以參考下
    2014-12-12

最新評論

普定县| 舟曲县| 金川县| 会东县| 互助| 临邑县| 乌审旗| 延寿县| 宿松县| 陈巴尔虎旗| 天长市| 潞城市| 融水| 启东市| 辽宁省| 炉霍县| 祁阳县| 潮州市| 内丘县| 罗定市| 芮城县| 长岛县| 隆化县| 巢湖市| 芦山县| 苍山县| 慈利县| 沙雅县| 郯城县| 江油市| 枞阳县| 西充县| 石家庄市| 怀来县| 黎城县| 甘孜| 开鲁县| 湾仔区| 平塘县| 萨嘎县| 德江县|