iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#自定义集合初始化器
  • 852
分享到

C#自定义集合初始化器

C#自定义集合集合初始化器 2022-11-13 13:11:18 852人浏览 八月长安
摘要

对int类型集合初始化,这样写: static void Main(string[] args) { var list = n

对int类型集合初始化,这样写:

        static void Main(string[] args)
        {
            var list = new List<int> {0, 1};
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

对键值对集合初始化,这样写:

        static void Main(string[] args)
        {
            var dic = new Dictionary<string, string>
            {
                {"location", "qingdao"},
                {"street","linGChuang"}
            };

            foreach (var item in dic)
            {
                Console.WriteLine("{0}:{1}", item.Key, item.Value);
            }
            Console.ReadKey();
        }

编译器是如何"读懂"集合初始化器?

编译器根据惯例来理解集合初始化器,即约定:如果一个类型实现IEnumerable<T>接口,并且提供了Add(object obj)方法,该类型可以使用集合初始化器。

假设,我们想通过一个集合初始化器来定义一个模特的集合,以胸围、腰围、臀围作为集合初始化器的参数:

var list = new MoTes{
    {79, 60, 89},
    {82, 63, 90}
};

{79, 60, 89}就像int类型一样,是一个数据结构,把它定义成结构类型:

    public struct SanWei
    {
        public readonly double _Xiong;
        public readonly double _Yao;
        public readonly double _Tun;

        //构造函数的参数类型、顺序和数量决定了集合初始化器的参数类型、顺序和数量
        public SanWei(double xiong, double yao, double tun)
        {
            _Xiong = xiong;
            _Yao = yao;
            _Tun = tun;
        }
    }

而想让MoTes类可以使用集合初始化器,需要满足2个条件:

  • 1、实现IEnumerable<SanWei>接口
  • 2、提供Add(double xiong, double yao, double tun)方法
    public class MoTes : IEnumerable<SanWei>
    {
        private readonly List<SanWei> _motes;

        public MoTes()
        {
            _motes = new List<SanWei>();
        }

        public void Add(double xiong, double yao, double tun)
        {
            _motes.Add(new SanWei(xiong, yao, tun));
        }
        public IEnumerator<SanWei> GetEnumerator()
        {
            return _motes.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

在客户端:

        static void Main(string[] args)
        {
            var list = new MoTes()
            {
                {79, 60, 89},
                {82, 63, 90}
            };
            foreach (var item in list)
            {
                Console.WriteLine("胸围:{0},腰围:{1},臀围:{2}",item._Xiong, item._Yao, item._Tun);
            }
            Console.ReadKey();
        }

到此这篇关于C#自定义集合初始化器的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#自定义集合初始化器

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

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

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

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

下载Word文档
猜你喜欢
  • C#自定义集合初始化器
    对int类型集合初始化,这样写: static void Main(string[] args) { var list = n...
    99+
    2022-11-13
    C# 自定义集合 集合初始化器
  • C#集合之自定义集合类
    一、非泛型方式,继承自CollectionBase public class MyClass { public static void Main() { ...
    99+
    2024-04-02
  • C#3.0中对象初始化器和集合初始化器怎么理解
    这篇文章主要讲解了“C#3.0中对象初始化器和集合初始化器怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#3.0中对象初始化器和集合初始化器怎么理解”吧!关于对象初始化器(Obje...
    99+
    2023-06-17
  • C#中怎么定义和初始化数组
    这篇文章给大家介绍C#中怎么定义和初始化数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一维数组 一维数组以线性方式存储固定数目的项,只需一个索引值即可标识任意一个项。在 C# 中,数组声明中的方括号必须跟在数据类型...
    99+
    2023-06-17
  • C# 3.0对象和集合初始化怎么实现
    这篇文章主要讲解了“C# 3.0对象和集合初始化怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# 3.0对象和集合初始化怎么实现”吧!Point类public class...
    99+
    2023-06-17
  • C++的定义,声明和初始化实例分析
    这篇文章主要介绍了C++的定义,声明和初始化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的定义,声明和初始化实例分析文章都会有所收获,下面我们一起来看看吧。定义变量的定义用于为变量分配存储空间,...
    99+
    2023-06-29
  • python list定义并初始化长度
    a = [1] * 10 定义一个长度为10的list 使用Python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节。这里记录一下range(),复习下list的slide,最后分析一个好玩...
    99+
    2023-01-31
    初始化 长度 定义
  • Java中Map集合初始化并赋值
    Java中Map集合初始化并赋值的几种方式: package com.itstone.mok.hutool;import com.google.common.collect.ImmutableMap;import org.junit.Tes...
    99+
    2023-08-17
    java junit 开发语言
  • ArrayList集合初始化及扩容方式
    目录ArrayList集合初始化及扩容ArrayList 集合ArrayList扩容机制(原理)总结ArrayList集合初始化及扩容 ArrayList 集合 1.默认初始化容量为...
    99+
    2023-03-13
    ArrayList集合初始化 ArrayList扩容 ArrayList初始化
  • Bean自定义初始化和销毁方法是什么
    今天小编给大家分享一下Bean自定义初始化和销毁方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Bean三种自定义初...
    99+
    2023-06-29
  • WCF如何自定义集合
    这篇文章主要为大家展示了“WCF如何自定义集合”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“WCF如何自定义集合”这篇文章吧。利用WSE(Web Service Enhancements)可以为...
    99+
    2023-06-17
  • Java如何自定义类数组的创建和初始化
    目录自定义类数组的创建和初始化自定义类封装数组,添加类方法实现数据自定义类数组的创建和初始化 刚刚在慕课学习Java的集合类List过程中,向集合中添加元素时,遇到一个问题: 定义了...
    99+
    2024-04-02
  • 一文带你分清C++的定义,声明和初始化
    目录定义初始化1.内置类型变量2.类声明实例声明时提供初值在构造函数内赋初值,而不用列表总结定义 变量的定义用于为变量分配存储空间,还可以为变量指定初始值。 int units_so...
    99+
    2024-04-02
  • 实践讲解SpringBoot自定义初始化Bean+HashMap优化策略模式
    策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 传统的策略模式一般是创建公共接口、定义公共方法——》然后创建实体类实现公共接口...
    99+
    2024-04-02
  • 总结Bean的三种自定义初始化和销毁方法
    目录Bean三种自定义初始化和销毁一. 三种方法概述二. 方法详述spring初始化后获取自定义注解Bean一.新建注解类二.新建接口类三.实现接口ApplicationListen...
    99+
    2024-04-02
  • JavaScript数组初始化大小怎么定义
    这篇“JavaScript数组初始化大小怎么定义”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2024-04-02
  • C++聚合体初始化aggregateinitialization详细介绍
    目录聚合体初始化(aggregate initialization)扩展聚合体初始化的动机使用聚合体扩展聚合体的定义向后的不兼容性聚合体初始化(aggregate initializ...
    99+
    2023-02-03
    C++聚合体初始化 C++ aggregate initialization
  • ArrayList集合初始化及扩容方法是什么
    这篇文章主要介绍“ArrayList集合初始化及扩容方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ArrayList集合初始化及扩容方法是什么”文章能帮助大家解决问题。ArrayList集...
    99+
    2023-07-05
  • C#中IEnumerable接口介绍并实现自定义集合
    简介 IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象。对于所有数组的遍历,都来自...
    99+
    2024-04-02
  • C++聚合体初始化的方法是什么
    本篇内容介绍了“C++聚合体初始化的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!聚合体初始化(aggregate initial...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作