C#3.0 中对象初始化器(Object Initializers)和集合初始化器(Collection Initializers)

Archify:用AI生成可验证、可追踪的架构图 架构图是软件开发中沟通设计意图的重要媒介,但传统手工绘制与普通AI画图工具往往只解决画布与排版问题,难以保证信息同步、依赖真实与来源可靠。当系统规模变大,一张经不起代码级追问的架构图会沦为摆设。Archify这类工具将AI生成与规则校验结合,通过解析项目代码和配置文件,生成结构化的架构描述,并基于明确规则进行验证,让每个节点和连接都能追溯至具体源码路径或配置定义。这种可验证、可追踪的机制,配合AI编程环境如Trae中的Skill配置,使架构图从一次性交付物转变为持续演进的工程资产。无论是微服务依赖分析、循环 阅读详情

C# 3.0 中对象初始化器(Object Initializers)  和 集合初始化器(Collection Initializers) ,就是简化我们的代码,让本来几行才能写完的代码一行写完。这样在LINQ的使用中,我们才不会把一个LINQ表达式写的巨复杂无比。

 

由于我看到几篇讲 对象初始化器(Object Initializers)和集合初始化器(Collection Initializers) 的文章,都是一个简单的例子,一些稍稍特殊一点的场景的初始化赋值并没有涉及,所以我特整理这篇博客。

 

关于对象初始化器(Object Initializers) 的一些问题:

 

问题一: 对象初始化器允许只给部分值赋值么?即不给其中一些值赋值

答案:允许;参考后面的代码。

问题二:对象初始化器允许给internal 的成员赋值?(私有成员肯定不用想了,肯定不能赋值。)

答案:允许;参考下面的代码。

 

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    private int test01 = 25;
    internal int test02;
}

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person { FirstName = "Scott", LastName = "Guthrie", test02 = 56, };
        Console.WriteLine(person.test02);
        Console.WriteLine(person.Age);
        Console.ReadLine();
    }

}

 

问题三:对象初始化器是否可以结合构造函数一起使用?

答案:可以参看如下代码就可以正常使用:

var cookie3 = new System.Net.Cookie("MyCookie", "Jose") { Comment = "a cookie" };

我们在构造函数中给 Cookie 的名字和值赋了值,在初始化构造器中给 Comment 属性赋了值。

 

问题四:构造函数赋值和初始化构造器赋值那个最先被执行?

比如下述代码,结果是那个呢??

static void Main(string[] args)
{
    var cookie = new System.Net.Cookie("MyCookie", "Jose") { Name = "test02", Comment = "a cookie" };
    Console.WriteLine(cookie.Name);
    Console.ReadLine();
}

答案:

构造函数比初始化构造器更早被执行。

上述WriteLine 写出来的信息为:test02

 

集合初始化器(Collection Initializers) 的一些问题:

 

问题一:集合初始化构造器中是否可以构造集合的一项为空值?

答案:可以,参看下述代码。

 

问题二:集合初始化构造器是否可以初始化Hashtable ?

答案:可以。这时候相当于用了两个对象初始化构造器,参看下面代码:

 

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    private int test01 = 25;
    internal int test02;
}

class Program
{
    static void Main(string[] args)
    {
        List people = new List {
            new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32 },
            new Person { FirstName = "Bill", LastName = "Gates", test02 = 85},
            new Person { FirstName = "Susanne", Age = 32 },
            null,
        };

        Hashtable pp = new Hashtable {
            { 1, new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32 } },
            { 2, new Person { FirstName = "Bill", LastName = "Gates", test02 = 85} },
            { 3, new Person { FirstName = "Susanne", Age = 32 } },
            { 4, null },
                       };

        Console.ReadLine();
    }
}

 

 

参考资料:

Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器

C# 3.0 - Object and Collection Initializers




详解C#中使用对象或集合的初始值设定项初始化的操作 主要介绍了详解C#中使用对象或集合的初始值设定项初始化的操作,文中分别讲了对对象和字典的初始化,需要的朋友可以参考下 立即下载

相关推荐

DSP(数字信号处理器)技术概要

数字信号处理器(digital signal processor,DSP)是一种用于数字信号处理的可编程微处理器,它的诞生与快速发展,使各种数字信号处理算送得以实时实现,为数字信号处理的研究和应用打开了新局面,提供了低成本的实际工作环境和应用平台,推动了新的理论和应用领域的发展。目前,DSP技术在通信、航空、航天。雷达、工业控制、医疗、网络及家用电器等各个领域都得到了广泛应用。 1.1 DSP系统和芯片的结构特点1.1.1 DSP系统的基本结构通过传感数将非电物理量转换为模拟电信号,预处理一般包括放大器和滤

m0_46582485的博客 2万+

C#教程:简化的初始化

提示:你必须被迫使用局部变量来做临时的处理, 或者创建一个帮助方法并基于参数来执行适当的初始化.简化的初始化面向对象的编程语言通常都拥有流线型的对象创建过程, 毕竟, 在你准备开始使用一个对象时, 不管是通过代码的直接调用还是工厂方法或者其他的方式你都必须要先创建它. 在C# 2中有少数新的特性让初始化过程变得简单了一点. 然而如果要做的无法通过构造器参数完成, 很不幸——你需要创建对象, 然后手工初始化设置各个属性值.当你想一次初始化一序列对象的时候这可能会令人有点厌烦, 例如在一个数组或者集合中——

思生活 4242

YonSuite如何新增用户并分配角色角色授权图文教程

用友YonSuite产品基础教学

ct341688的博客 617

【C#】表达式树的应用之对象初始化

相信大家在实际开发中常常都会用到对象池的技术,及对对象的复用。通过对对象的复用可以大大简单对象的创建数量,同时也是减少对象频繁的创建和销毁流程,从而减少GC。但是在对对象复用时,常常会出现这么一种情况,就是在使用复用对象时,如果不进行全部赋值,那么就会使得对象数据有残留,如果这个对象正常使用时并不是全部需要赋值时,那为了避免数据残留,就需要自己手动为字段赋初值,这一点大大的降低了工作效率,同时如果字段过多时,也可能导致少赋值的情况。

qq_42696107的博客 587

手把手教你用STM32的SPI驱动MCP2517FD实现CAN FD通信(附完整代码)

本文详细介绍了如何使用STM32通过SPI驱动MCP2517FD实现CAN FD通信,涵盖硬件连接、SPI驱动编写、寄存器配置及数据收发实战。提供完整代码示例和常见问题排查指南,帮助开发者快速构建高可靠性的CAN FD通信系统,适用于汽车电子和工业控制等领域。

weixin_30607029的博客 674

ptrade从零开始学量化第1期【ptrade如何新建策略、新建回测、新建交易】什么是ptrade量化交易?

回测之前需要对开始时间、结束时间、回测资金、回测基准、回测频率几个要素进行设定,设定完毕后点击保存。然后再点击回测按键,系统就会开始运行回测,回测的评价指标、收益曲线、日志都会在界面中展现。可以选择不同的业务类型(比如股票),然后给策略设定一个名称,添加成功后可以在默认策略模板基础上进行策略编写。交易界面点击新增按键进行新增交易操作,策略方案中的对象为所有策略列表中的策略,给本次交易设定名称并点击确定后系统就开始运行交易了。交易开始运行后,可以点击交易详情,查看策略评价指标、交易明细、持仓明细、交易日志。

GJ57017_wx的博客 2481

JToken, JObject, JArray 的一些内容

JProperty   - 表示一个JSON属性(在JObject中是一个name/JToken键值对): 用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化。:Newtonsoft.Json封装类,里面的JToken直接实现对JSON的增删改查。JContainer     - 能够包含其它JToken的JToken抽象基类。JArray     - 表示一个JSON数组(包含一个有序的List):一旦遇到动态的json数据,这种方法就不使用。

dongnihao的博客 2096

Ubuntu20.04复现instant-ngp,自建数据集,导出mesh

本次仅仅记录一下自己复现instant-ngp的过程,如果里面的参考有冒犯到原博主请联系我删除,本人也是nerf的小白一枚,可以一起交流学习神经辐射场,希望大家在复现instant-ngp的时候少走一些坑,情况允许下可以去复现一下npg-pl和nerfStudio,最后希望大家一起进步。看到一些博主说葵司的npg_pl也不错,而且葵司是台湾人,在youtube上也有讲解的视频。渲染的效果还是可以的,相对于源码来说还是有点模糊,我一些参数也没有设置,直接就拉进来进行渲染,速度是非常快的。

weixin_59961223的博客 9449

C#3.0新体验(三) 对象与集合初始化器

 前言:      每天起得很早,花将近1.5个小时的路程来到公司,晚上下班到家基本上19:30以后;每天除了睡觉的7个多小时,有将近1/5时间在路上,呵呵,不知道有多少人和我一样,我想所谓大城市的快节奏是不是因为住得离公司太远,每天为了不迟到赶到公司,下班为了赶紧回家和家人一起吃饭而催生出来的;在这种环境生活不容易啊,每天地铁、公交的拥挤能把一天的好心情都挤没了,到了公司除了一身汗臭还有就是

山南水北之家 669

python音频信号分析

声音以具有诸如频率、带宽、分贝等参数的音频信号的形式表示,典型的音频信号可以表示为幅度和时间的函数

MAY的博客 2785

2026年最值得学习的十大 SAP 开发技术

在这辞旧迎新之际,我想和大家聊聊我心中的2026年我仍然愿意持续投入时间去学习的一些 SAP 开发技术。因为笔者水平和视野局限,加上这份清单有笔者主观兴趣爱好在内,可能大家对清单上罗列的技术有不同意见,欢迎大家在评论区发表自己的见解。下面是笔者列出的十个技术方向,排名不分先后。因为精力有限,2026年我很可能只会选择其中一两个自己最感兴趣的方向去深耕。每项技术后面都提供了链接,方便大家看完就开始学习。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1518

步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Ext

[索引页][源码下载]步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)作者:webabcd介绍    ·Au

webabcd的专栏 485

【船舶】风浪流模型水面船舶三自由度运动仿真【含Matlab源码 4379期】

风浪流模型水面船舶三自由度运动仿真 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 693

C# 3.0 中对象初始化器(Object Initializers) 和 集合初始化器(Collection Initializers)

C# 3.0 中对象初始化器(Object Initializers) 和 集合初始化器(Collection Initializers) ,就是简化我们的代码,让本来几行才能写完的代码一行写完。这样在LINQ的使用中,我们才不会把一个LINQ表达式写的巨复杂无比。 由于我看到几篇讲 对象初始化器(Object Initializers)和集合初始化器(Collec...

weixin_30405421的博客 112

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C#3.0 对象与集合初始化器(Object and Collection Initializers)

<br /> 对象初始化器 (Object Initializers) :<br />.NET2.0框架中的类型非常依赖于属性。当生成对象实例和使用新的类型时,在.Net2.0时候我们像这样写:<br />User user = new User(); user.Id = 1; user.Name = "YJingLee"; user.Age = 22; <br /> <br />在VS2008中,编译器会自动地生成合适的属性setter代码,使得原来几行的属性赋值操作可以在一行完成。我们可以这样简化

anfeng_8379的专栏 637

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C#3.0 中对象初始化器(Object Initializers)和集合初始化器(Collection Initializers) _C#应用

C# 3.0 中对象初始化器(Object Initializers)  和 集合初始化器(Collection Initializers) ,就是简化我们的代码,让本来几行才能写完的代码一行写完。这样在LINQ的使用中,我们才不会把一个LINQ表达式写的巨复杂无比。 由于我看到几篇讲 对象初始化器(Object Initializers)和集合初始化器(Collection Initialize

280

C#3.0 中对象初始化器(Object Initializers)和集合初始化器(Collection Initializers)_C#应用

C# 3.0 中对象初始化器(Object Initializers)  和 集合初始化器(Collection Initializers) ,就是简化我们的代码,让本来几行才能写完的代码一行写完。这样在LINQ的使用中,我们才不会把一个LINQ表达式写的巨复杂无比。   由于我看到几篇讲 对象初始化器(Object Initializers)和集合初始化器(Collection Initiali

192

C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)

介绍    ·Automatic Properties(自动属性)    ·Object Initializers(对象初始化器)    ·Collection Initializers(集合初始化器)    ·Extension Methods(扩展方法)示例AutomaticProperties.cs(自动属性)using System;using System.Data;using Sy

赵晓雷的专栏 688

3、步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Colle...

[索引页] [源码下载] 步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法) 作者:webabcd 介绍 ·Au...

weixin_30758821的博客 129
上一篇: C#3.0 LINQ 查询语法
下一篇: C#3.0 中使用扩展方法来扩展接口
techweb
博客等级 码龄19年 225粉丝 3842原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值