iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >如何在C#中使用只读的 Collections
  • 771
分享到

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

2024-04-02 19:04:59 771人浏览 独家记忆
摘要

目录三大只读类型介绍使用 IReadOnlyList 替换 List使用 IEnumberable 接口集合 表示一组可用于获取和存储的对象,在 C# 中提供了两种类型的集合。

集合 表示一组可用于获取和存储的对象,在 C# 中提供了两种类型的集合。

  • 普通集合
  • 泛型集合

前者存在于 System.Collections 命名空间下,属类型不安全的,后者存在于 System.Collections.Generic 命名空间下,属类型安全的。

不可变对象 定义为一旦创建就不可变更的对象, 在 .net core 中就存在着这三大 IReadOnlyList,IReadOnlyDictionary 和 IReadOnlyCollection 不可变集合,这篇文章我们就来讨论这些不可变集合以及在C#中如何使用。

三大只读类型介绍

IReadOnlyCollection 表示一个只读集合的基础接口,它实现了 IEnumerable 接口,代码定义如下:


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

IReadOnlyDictionary 表示一个字典的只读形态,它实现了基础的只读集合接口 IReadOnlyCollection, 下面的代码展示了如何将 泛型字典 只读化。


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

IReadOnlyList 表示一个列表的只读形态,值得注意的是 只读集合 只能通过 index 访问,如下代码所示:


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

使用 IReadOnlyList 替换 List

接下来我们看一下如何使用 IReadOnlyList 替换 List 来实现列表的只读化,考虑下面的类。


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

假如你想从数据库中返回 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"
       }
    };
}

为了简化,我省略了对数据库繁琐的操作,下面的代码展示了如何在 Main 方法中调用 GetAuthors() 方法。


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

显而易见上面的这种 authors 集合是我们用的最多的可变集合,那现在的问题是如何阻止 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 接口

不知道大家可否发现,现存的只读接口都继承了 IEnumberable,这就意味着 IEnumberable 也是一种只读形态,如果你只需要对集合进行迭代,那么就可以使用 IEnumberable 接口啦,如下代码所示:


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

如果需求不满足,可以对 IEnumerable 继续向下转型,比如想对集合进行索引访问,那么可以转成 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 较早版本可用于只读集合形态的接口, 在 .Net Core 中提供了新的只读接口可用于阻止集合的修改,不过值得注意的是,这些对数据提供只读视图的接口,本质上来说也仅仅是高层的封装而已。

以上就是如何在C#中使用只读的 Collections的详细内容,更多关于C#中使用只读的 Collections的资料请关注编程网其它相关文章!

--结束END--

本文标题: 如何在C#中使用只读的 Collections

本文链接: https://www.lsjlt.com/news/123261.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在C#中使用只读的 Collections
    目录三大只读类型介绍使用 IReadOnlyList 替换 List使用 IEnumberable 接口集合 表示一组可用于获取和存储的对象,在 C# 中提供了两种类型的集合。 ...
    99+
    2024-04-02
  • 怎么在C#中地址只读 Collections
    本篇文章为大家展示了怎么在C#中地址只读 Collections,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。集合 表示一组可用于获取和存储的对象,在 C# 中提供了两种类型的集合。普通集合泛型集合...
    99+
    2023-06-14
  • collections模块如何在Python中使用
    这期内容当中小编将会给大家带来有关collections模块如何在Python中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据...
    99+
    2023-06-14
  • 如何在Python项目中使用collections模块
    这篇文章主要介绍了如何在Python项目中使用collections模块,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;...
    99+
    2023-06-06
  • 如何在Java中使用Collections工具类
    本篇文章为大家展示了如何在Java中使用Collections工具类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数...
    99+
    2023-06-14
  • Python中 Collections 模块如何使用
    今天就跟大家聊聊有关Python中 Collections 模块如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。collections模块是一个不用不知道,一用就上瘾的模块。这...
    99+
    2023-06-15
  • 如何在C#中使用Socket读取超大的数据
    这期内容当中小编将会给大家带来有关如何在C#中使用Socket读取超大的数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。/// <summary>   ...
    99+
    2023-06-06
  • python 中collections的 deque使用详解
    目录1 概要2 重要方法说明3 总结1 概要 deque 是一个双端队列, 如果要经常从两端append 的数据, 选择这个数据结构就比较好了, 如果要实现随机访问,不建议用这个,请...
    99+
    2024-04-02
  • oracle如何创建只读用户
    要创建一个只读用户,请按照以下步骤操作:1. 以具有适当权限的管理用户登录Oracle数据库。2. 打开SQL命令行或使用Oracl...
    99+
    2023-08-30
    oracle
  • Python内置模块Collections如何使用
    本篇内容主要讲解“Python内置模块Collections如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python内置模块Collections如何使用”吧!1、模块说明collec...
    99+
    2023-06-29
  • 如何在C#中使用Filewatcher
    要在C#中使用FileWatcher,首先需要创建一个FileWatcher对象,并设置所需的属性和事件处理程序。以下是一个简单的示...
    99+
    2023-09-27
    C#
  • 如何在C# 中使用 FFmpeg.NET
    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用 LGPL 或 GPL 许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非...
    99+
    2024-04-02
  • 如何在c#中读取CAD文件
    今天就跟大家聊聊有关如何在c#中读取CAD文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。//在不使用任务插件的情况下读取DWG文件的缩略图,以便在没有安装AutoCAD的计算机上...
    99+
    2023-06-15
  • 如何在CentOS上启用软件集Software Collections
    本篇文章为大家展示了如何在CentOS上启用软件集Software Collections,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。红帽企业版 linux(RHEL)和它的社区版分支&m...
    99+
    2023-06-16
  • 如何在C#中读取配置文件
    如何在C#中读取配置文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C#读取配置文件1.了解配置文件概述:应 用程序配置文件是标准的 XML 文件,XML 标...
    99+
    2023-06-18
  • 如何在C#中使用Dapper ORM
    目录使用 Visual Studio 安装 Dapper ORM使用 Dapper ORM 进行增删查改在 Dapper ORM 中使用 存储过程对象关系映射(ORM)这个概念已经存...
    99+
    2024-04-02
  • 如何在python中使用xlwings库读写excel
    如何在python中使用xlwings库读写excel?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、xlwings 中的逻辑:应用->工作簿->工作表->...
    99+
    2023-06-06
  • 如何在Python中使用pandas读取数据
    今天就跟大家聊聊有关如何在Python中使用pandas读取数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、三种数据文件的读取二、csv、tsv、txt 文件读取1)CSV文件...
    99+
    2023-06-15
  • 如何在C#中使用Image控件
    这篇文章给大家介绍如何在C#中使用Image控件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先是View层,比较简单:<Grid Grid.Row="1"> &n...
    99+
    2023-06-06
  • 如何使用C#扫描并读取图片中的文字
    目录程序测试环境:详细步骤程序测试环境: Visual Studio版本要求不低于2017 图片扫描工具:Spire.OCR for .NET 图片格式:p...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作