C# 13集合表达式的数组转换全解析(程序员必知的5个隐藏特性)

第一章:C# 13集合表达式数组转换概述

C# 13 引入了集合表达式(Collection Expressions),这一语言特性极大简化了数组与集合的初始化和转换操作。开发者现在可以使用统一的语法来创建、组合和转换多种集合类型,而无需依赖复杂的构造函数或辅助方法。该特性支持从列表、数组到实现了特定接口的自定义集合之间的无缝转换。

集合表达式的语法基础

集合表达式使用简洁的字面量语法,通过方括号 [] 包裹元素来声明集合。其核心优势在于能够自动推断目标类型,并在赋值或传递时执行隐式转换。
// 使用集合表达式初始化数组
int[] numbers = [1, 2, 3, 4, 5];

// 转换为 List
List<int> list = [1, 2, 3, 4, 5];

// 组合多个集合
var combined = [..numbers, ..list];
上述代码中,[..numbers, ..list] 使用展开运算符将两个集合合并为新的集合表达式,编译器会根据上下文生成合适的运行时对象。

支持的转换类型

C# 13 的集合表达式可转换为目标类型需满足以下任一条件:
  • 实现 IEnumerable<T> 且具有兼容的构造函数
  • 是数组类型
  • 实现 ISet<T> 或 List<T> 等常见集合接口
源表达式可转换目标类型示例
[1, 2, 3]int[]int[] arr = [1, 2, 3];
[1, 2, 3]List<int>List<int> list = [1, 2, 3];
[..arr]Span<int>需配合栈分配使用

性能与应用场景

集合表达式在编译期优化生成代码,避免了中间集合的频繁分配,特别适用于配置初始化、测试数据构建和函数链式调用场景。结合 Span<T> 和栈分配,还能进一步提升高性能路径下的执行效率。

第二章:集合表达式的核心语法与数组转换机制

2.1 理解集合表达式的语言设计演进

集合表达式的设计经历了从命令式到声明式的转变,反映了编程语言对数据操作抽象能力的提升。早期语言如C需通过循环手动构建集合,而现代语言则内建了更自然的表达方式。
语法简洁性的演进
以Python的列表推导为例:

squares = [x**2 for x in range(10) if x % 2 == 0]
该表达式等价于传统for循环,但更紧凑。x**2 是映射操作,for x in range(10) 定义迭代源,if x % 2 == 0 实现过滤,三者组合形成“生成-过滤-转换”一体化语法。
多语言支持对比
语言集合表达式形式特性
Python列表/集合/字典推导语法统一,支持条件过滤
Scalafor-yield表达式支持模式匹配与多生成器

2.2 集合初始值设定项到数组的隐式转换

在C#语言中,集合初始值设定项不仅适用于集合类型,还可用于数组的初始化。当使用集合初始值设定项为数组赋值时,编译器会自动执行从初始化列表到目标数组类型的隐式转换。
语法示例

string[] names = { "Alice", "Bob", "Charlie" };
上述代码中,大括号内的元素列表即为集合初始值设定项。编译器根据声明的数组类型 string[] 推断出每个字符串字面量的类型,并生成等价于显式数组创建的IL代码。
编译过程解析
  • 编译器检测目标变量的数组类型
  • 验证所有初始值与数组元素类型的兼容性
  • 生成等效的 new string[] { ... } 表达式
该机制提升了代码可读性,同时保持类型安全和运行效率。

2.3 使用with表达式实现不可变数组更新

在函数式编程中,不可变数据结构的更新常通过生成新副本来完成。Scala 3 引入的 `with` 表达式为此类操作提供了简洁语法。
基本用法
val arr = Array(1, 2, 3)
val newArr = arr.withUpdated(1, 5) // 返回新数组,索引1处值为5
`withUpdated(index, value)` 不修改原数组,而是创建副本并更新指定索引。该方法确保线程安全与状态可追溯。
链式更新支持
  • 每次调用返回新实例,支持连续操作
  • 适用于构建复杂变换逻辑
方法说明
withUpdated(i, v)返回索引i更新为v的新数组
appended(x)末尾追加元素并返回新数组

2.4 编译器如何优化集合表达式生成的IL代码

在处理集合表达式时,C# 编译器会通过消除临时对象和内联转换逻辑来优化生成的 IL 代码。
编译器优化策略
  • 避免创建中间集合,直接生成迭代器逻辑
  • 将 Where、Select 等操作合并为单一循环结构
  • 使用泛型强类型减少装箱/拆箱开销

var result = numbers.Where(x => x > 5).Select(x => x * 2);
上述表达式不会生成临时数组。编译器将其转化为状态机,并在 IL 中生成高效循环,仅遍历一次源集合。谓词和投影函数被内联至循环体,减少方法调用开销。
性能对比示意
优化方式效果
链式操作合并减少遍历次数
延迟执行避免不必要计算

2.5 实战:从传统数组初始化迁移到集合表达式

在现代编程实践中,集合表达式正逐步取代传统的数组初始化方式,提供更简洁、可读性更强的语法。
传统方式的局限
早期代码中常使用显式循环或重复声明初始化数组:

String[] colors = new String[3];
colors[0] = "red";
colors[1] = "green";
colors[2] = "blue";
这种方式冗长且易出错,尤其在初始化大量元素时维护成本高。
迁移到集合表达式
Java 和 C# 等语言支持集合初始化器,允许内联构造:

var colors = new List<string> { "red", "green", "blue" };
该语法直接在声明时填充元素,提升代码紧凑性与语义清晰度。
  • 减少样板代码
  • 支持嵌套集合初始化
  • 与 LINQ 或流操作无缝集成

第三章:隐藏特性深度剖析

3.1 特性一:栈上分配与Span兼容的高效转换

栈上分配的优势

在高性能场景中,减少堆内存分配是优化关键。通过将短生命周期对象分配在栈上,可显著降低GC压力。Span作为ref struct,天然支持栈上存储,且具备内存安全保证。

高效转换示例

Span<byte> buffer = stackalloc byte[256];
var data = "Hello".AsSpan();
data.CopyTo(buffer);
上述代码使用stackalloc在栈上分配256字节缓冲区,并通过AsSpan()将字符串转换为只读Span,调用CopyTo实现高效复制。整个过程无堆分配,且访问速度接近原生指针。
  • stackalloc 仅用于局部变量,生命周期受限于方法作用域
  • Span<T> 提供类型安全与越界检查,兼顾性能与安全性

3.2 特性二:泛型上下文中集合表达式的类型推导规则

在泛型编程中,集合表达式的类型推导能力显著提升了代码的简洁性与安全性。当编译器在泛型上下文中处理集合字面量时,会结合上下文目标类型进行逆向类型推断。
类型推导的基本流程
编译器优先使用显式声明的泛型参数作为候选类型,再结合集合元素的类型一致性进行统一。若元素类型存在继承关系,则推导出最窄公共超类型。
示例与分析

type List[T any] []T
func Process[T any](items List[T]) T { return items[0] }

// 调用时自动推导 T 为 string
result := Process([]string{"a", "b"})
上述代码中,Process 的参数类型 List[T] 与传入的 []string 匹配,编译器成功推导出 T = string,无需显式指定泛型参数。
  • 推导前提:上下文必须提供足够的类型信息
  • 空集合需显式标注类型,否则推导失败

3.3 特性三:与模式匹配结合的动态数组构造

模式驱动的数组生成机制
现代编程语言中,动态数组的构造逐渐与模式匹配能力深度融合。通过识别数据结构中的特定模式,可在运行时智能生成数组元素。

// 根据正则匹配结果构造字符串数组
matches := regexp.MustCompile(`\d+`).FindAllString("a1b22c333", -1)
// 结果: []string{"1", "22", "333"}
该代码利用正则表达式模式 `\d+` 匹配连续数字,并自动生成对应字符串切片。参数 `-1` 表示返回所有匹配项。
典型应用场景
  • 从日志流中提取符合格式的时间戳序列
  • 解析配置文件中的键值对并构造映射数组
  • 基于类型断言模式构建多态元素列表

第四章:性能优化与最佳实践

4.1 避免装箱:值类型集合中的内存布局控制

在处理值类型集合时,频繁的装箱操作会导致性能下降和内存碎片。为避免这一问题,应优先使用泛型集合如 `List`,它能在编译期确定元素类型,从而避免将值类型存储在堆上。
泛型集合的内存优势
泛型集合直接在栈或连续堆内存中存储值类型数据,无需装箱。例如:

List numbers = new List();
numbers.Add(42); // 直接存储值,无装箱
上述代码中,`int` 作为值类型直接存入集合,避免了装箱带来的堆分配与GC压力。
装箱与非装箱的对比
操作是否装箱内存开销
List<int>.Add(5)否低(栈/连续堆)
ArrayList.Add(5)是高(堆分配 + GC)

4.2 在高频率场景中减少GC压力的技巧

在高频业务场景中,频繁的对象创建与销毁会显著增加垃圾回收(GC)负担,进而影响系统吞吐量与响应延迟。通过优化内存使用模式,可有效缓解该问题。
对象池技术复用实例
使用对象池避免重复创建临时对象,尤其适用于短生命周期的高频对象。例如在Go中可通过 sync.Pool 实现:
var bufferPool = sync.Pool{
    New: func() interface{} {
        return new(bytes.Buffer)
    },
}

func getBuffer() *bytes.Buffer {
    return bufferPool.Get().(*bytes.Buffer)
}

func putBuffer(buf *bytes.Buffer) {
    buf.Reset()
    bufferPool.Put(buf)
}
上述代码通过 Get 复用缓冲区实例,Reset 清理内容后由 Put 归还至池中,显著降低内存分配频率。
预分配切片容量
对于已知规模的集合操作,预先设置切片容量可避免动态扩容引发的内存拷贝:
  • 使用 make([]T, 0, cap) 指定初始容量
  • 减少因扩容导致的临时内存占用

4.3 并发环境下集合表达式的安全使用模式

在高并发场景中,集合对象的线程安全性至关重要。直接使用非同步集合(如 Go 中的 map)可能导致竞态条件。
同步机制选择
推荐使用读写锁保护共享集合,以平衡读多写少场景下的性能与安全。
var mu sync.RWMutex
var data = make(map[string]int)

func Read(key string) int {
    mu.RLock()
    defer mu.RUnlock()
    return data[key]
}

func Write(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    data[key] = value
}
上述代码通过 sync.RWMutex 实现对 map 的安全访问:读操作使用 RLock() 允许多协程并发读取;写操作使用 Lock() 独占访问,确保数据一致性。
使用建议
  • 避免在热点路径中长时间持有写锁
  • 考虑使用原子操作或并发安全容器(如 sync.Map)替代简单锁

4.4 与ReadOnlyArray<T>集成提升API设计质量

在现代TypeScript开发中,`ReadOnlyArray`的引入显著增强了API的健壮性与语义清晰度。通过将数组参数声明为只读,可防止意外的内部状态修改。
类型安全增强
使用`ReadOnlyArray`明确表达“不应被修改”的意图,避免副作用:

function processItems(items: ReadOnlyArray): void {
  // items.push("new"); // 编译错误:不可变
  console.log(items[0]);
}
上述代码中,任何尝试修改数组的操作都会在编译阶段被拦截,提升程序可靠性。
接口契约强化
  • 消费者明确知晓传入数组不会被更改
  • 开发者无法误用可变方法,如sort、push
  • 促进函数式编程风格,鼓励返回新实例而非原地修改
该模式尤其适用于库级API设计,确保外部调用上下文的数据完整性不受影响。

第五章:未来展望与生态影响

量子计算对现有加密体系的冲击
当前主流的RSA和ECC加密算法依赖大数分解与离散对数难题,而Shor算法可在量子计算机上实现多项式时间破解。例如,一台具备百万物理量子比特的容错量子机可在数小时内破解2048位RSA密钥。

# 模拟Shor算法核心步骤(简化示意)
def shor_factor(N):
    from math import gcd
    import random
    # 选择随机基数 a
    a = random.randint(2, N-1)
    if gcd(a, N) != 1:
        return gcd(a, N)
    # 量子傅里叶变换寻找周期 r
    r = quantum_fourier_period_find(a, N)  # 假设此函数已实现
    if r % 2 == 0 and pow(a, r//2, N) != N-1:
        factor1 = gcd(pow(a, r//2) - 1, N)
        factor2 = gcd(pow(a, r//2) + 1, N)
        return max(factor1, factor2)
    return None
后量子密码迁移路径
NIST已选定CRYSTALS-Kyber为标准化的后量子密钥封装机制。企业应启动以下迁移流程:
  • 识别高敏感数据通信节点(如API网关、数据库连接)
  • 部署混合加密模式:传统TLS + Kyber密钥协商
  • 使用OpenQuantumSafe项目提供的liboqs进行原型验证
  • 制定5年过渡期计划,优先保护长期保密数据
绿色数据中心的能效优化趋势
随着AI训练集群功耗突破百兆瓦级,液冷技术渗透率正快速上升。某头部云厂商在张家口部署的浸没式液冷机柜,PUE降至1.07,较风冷降低35%能耗。
冷却方式平均PUE单机柜功率密度运维复杂度
传统风冷1.556–8 kW低
冷板液冷1.2515–20 kW中
浸没式液冷1.0730+ kW高
C#字符串分割深度解析:从基础Split到高性能Span实战 字符串处理是编程中的基础操作,其核心在于将数据序列按特定规则分解为有意义的片段。在C#中,`string.Split`方法是实现字符串分割的核心API,其原理是通过识别分隔符将原字符串拆分为子字符串数组。掌握其不同重载和`StringSplitOptions`枚举的运用,能显著提升代码的健壮性,有效处理空条目和前后空格,避免常见的数组越界和空引用异常。从技术价值看,高效、准确的字符串解析是数据导入、日志处理、文本分析和网络协议解析等场景的基石。本文以`StringSplitOptions.RemoveEmp 阅读详情

相关推荐

Flee轻型表达式引擎:.NET动态计算与AOT友好规则引擎实践

表达式引擎是实现业务逻辑动态化的核心技术,其本质是将字符串形式的计算逻辑安全、高效地解析并求值。原理上分为词法分析、语法解析(如递归下降)和运行时求值(如栈式虚拟机),区别于依赖Expression.Compile或JS引擎的方案,它通过静态类型推导与零反射设计保障确定性性能。技术价值体现在低内存占用、无JIT依赖、AOT原生兼容及强沙箱可控性,特别适用于报表系统、风控策略、BI指标等需热更新且高稳定的生产场景。本文聚焦开源、轻型、表达式引擎Flee在.NET生态中的工程落地。

dejz8829的专栏 366

C#最新语言特性

近几年持续引入多个新特性以提升开发效率和代码质量,截至今年2025年2月,C#的最新稳定版本是C#13,它是在2024年11月发布的,下方是一些C#13中的新特性以及近期版本特性。

C6666888的博客 3082

C# C++ 笔记

变量自定义赋值​# 变量取值用$()​​​​​​clean:多个程序员分发同一程序时,由于不能直接在一个程序上进行功能的开发,所以就有了功能分支的概念。二维数组可以理解为是存储指针的一维数组,里面的每一个指针都指向一个一维数组的首地址存储多个一维数组的数据结构。array 是一个二维数组,它有3行和4列,总共可以存储12个整数。

AVICCI的博客 2202

【C# 13性能革命】:集合表达式优化的5大核心细节曝光

掌握C# 13集合表达式的性能优化细节,显著提升高频数据操作效率。涵盖数组初始化、栈分配优化、内存复用等核心方法,适用于高性能场景。编译期优化与运行时表现双突破,值得收藏。

ProcePerch的博客 882

C++ 知识补充

向量(vector)是一个封装了动态大小数组的顺序容器(SequenceContainer)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。C++中map提供的是一种键值对容器,里面的数据都是成对出现的,如下图:每一对中的第一个值称之为关键字(key),每个关键字只能在map中出现一次;第二个称之为该关键字的对应值。

weixin_47059239的博客 2130

Unity 面试题篇|(一)C#基础篇 【全面总结 | 持续更新】

里氏替换原则(Liskov Substitution Principle LSP)⾯向对象设计的基本原则之⼀。里氏替换原则中说,任何基类可以出现的地⽅,⼦类⼀定可以出现,作⽤⽅便扩展功能能子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法。子类中可以增加自己特有的方法。当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。代理就是⽤来定义指向⽅法的引⽤。

游戏开发小Y的博客 13万+

你还在写低效集合代码?C# 13新特性让你性能翻倍

掌握C# 13集合表达式的性能优化细节,显著提升集合初始化效率。适用于高频数据处理场景,通过简化语法减少内存开销与执行时间,实现性能翻倍。代码更简洁且运行更快,值得收藏。

FuncTide的博客 950

Gröbner基方法入门第I部分:项序和约化

Gröbner基方法入门第I部分:项序和约化 理想的准素分解与矩阵分解是计算代数的核心问题,它们在计算机代数、计算代数几何、代数编码和密码学、多维系统理论等学科都有非常重要的理论意义与应用价值.Gröbner基理论是研究理想的准素分解与矩阵素分解的重要工具之一.更简单地概括:Gröbner基方法是从任意一个多项式理想的一组给定生成元,计算另一组性质良好的生成元,并称为该理想的Gröbner基.它能用来判定任意多项式是否属于该理想. Gröbner基的代数算法是Buchberger在1960年代开发的,并

MinCong Luo的博客 4265

C# 13集合表达式深度剖析(内存占用与GC压力全解析)

深入解析C# 13集合表达式的性能优化与内存占用分析,提升高频数据操作效率。涵盖编译器优化机制、栈分配策略与GC压力缓解方法,适用于高性能场景。掌握底层原理,显著降低内存开销,值得收藏。

FastCompile的博客 847

【高清照片】深圳光博会看PCIe Over Fibre 实现方案

本文分析了PCIe over Fibre技术及其在数据中心的应用前景。该技术通过光纤延伸PCIe总线,解决了传统铜缆距离限制问题,支持跨机架资源池化。目前主要有两种实现方式:CDFP混合光缆方案和Retimer转接卡方案,各有优缺点。文章还探讨了CDFP接口的现状、低速信号传输解决方案,以及PCIe速率与光通信发展的对应关系。最后对比了PCIe光缆与以太网光缆的关键差异,指出PCIe光互连在协议透明度和边带信号处理上的特殊要求。随着标准推进,PCIe over Fibre将成为数据中心扩展高带宽、低时延互连

Saniffer的博客 1387

【01】Canoe零基础手把手教学 --- Canoe安装

Canoe零基础手把手教学

jaytinlove的博客 7763

C# 13集合表达式优化终极指南:让IEnumerable<T>性能飙升的秘密武器

掌握C# 13集合表达式的性能优化与内存占用分析,显著提升IEnumerable<T>执行效率。适用于高频数据处理场景,通过栈分配优化、减少装箱和惰性求值改进,降低GC压力。核心方法实测性能翻倍,内存占用减少40%以上,值得收藏。

Instrustar的博客 1000

Linux 常用命令大全(2025 最新版)

掌握这些命令,你已能应对80% 的 Linux 日常操作!更多高级技巧(如crontab定时任务、iptables防火墙配置)可参考手册(man 命令名)或官方文档。实践是学习命令的最佳方式,建议在虚拟机或云服务器中多动手操作!

2302_79600390的博客 1896

集合表达式不是语法糖!C# 13背后隐藏的Span<T>融合机制与零分配集合构建(仅限.NET 8+ RTM环境)

C# 13集合表达式扩展实现零分配集合构建,依托Span<T>融合机制,在.NET 8+ RTM中直接生成栈驻留或内存池-backed集合。适用于高性能场景如游戏逻辑、实时处理,显著降低GC压力。值得收藏

SimSolve的博客 210

铁路场景雷达点云目标识别与追踪系统

本文介绍了一种基于毫米波雷达的铁路货运车站安全监控系统。该系统采用分布式架构,通过多个毫米波雷达节点采集点云数据,经过坐标转换、多雷达融合等处理后,利用机器学习算法实现列车、行人等目标的实时识别与追踪。系统包含数据采集层、处理层、目标识别层、追踪层、预警决策层和可视化层,能够克服传统视频监控受环境影响大的缺点,实现全天候可靠监测。文中详细展示了雷达数据解析和点云预处理的代码实现,包括坐标转换、数据格式解析和体素网格滤波等关键技术。该系统可有效预警铁路场景下的碰撞风险,提升货运车站的安全管理水平。

huanghm88的专栏 125

如何在SpringBoot中实现AI 流式输出?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1481

深入探索:C# 语言版本演进与特性解析

C# 自2000年发布以来经历了20多年的持续发展,从1.0到13.0每个版本都带来了重大改进。早期版本(1.0-3.0)奠定了面向对象基础,引入泛型、LINQ等核心特性;中期版本(4.0-6.0)通过动态类型、异步编程等提升了开发效率;近期版本(7.0-13.0)则带来了模式匹配、记录类型、泛型属性等现代化特性。版本演进不仅提升了开发效率和代码可读性,还改善了性能与内存管理,并通过.NET Core实现了跨平台能力。

caifox的博客 1159

2、欧洲期权的赫斯顿模型

本文详细介绍了赫斯顿随机波动率模型在欧洲期权定价中的应用。模型通过引入随机方差过程,克服了布莱克-斯科尔斯模型中波动率恒定的局限性,更贴近市场实际。文章阐述了模型的动态结构、风险中性转换、期权定价公式及其半封闭解的计算方法,并提供了基于VBA的数值实现方案。通过梯形法则与高斯积分等数值方法对比,分析了不同积分策略的精度与效率。同时验证了当波动率为零时,赫斯顿模型退化为布莱克-斯科尔斯模型的一致性。最后讨论了模型的优势、挑战及实际应用建议,强调了数值积分稳定性和参数估计的重要性。

tequila的博客 350

C#方法全解析:从基础到高级应用

方法是面向对象编程的核心构建块,通过封装特定功能的代码块实现代码复用和逻辑组织。在C#中,方法可分为实例方法、静态方法、虚方法等多种类型,支持参数传递、异步编程等高级特性。合理使用方法能够提升代码的可维护性和性能,特别是在处理值类型与引用类型、多线程调用等场景时需要注意优化策略。本文深入探讨C#方法的设计模式、性能优化及实际项目中的应用技巧,帮助开发者掌握虚方法分派、泛型方法等关键技术,提升代码质量与执行效率。

weixin_30619101的博客 341

【100%通过率】华为od机试C卷【出差 / 员工派遣】Java&Go 实现

某公司部门需要派遣员工去国外做项目。现在,代号为 x 的国家和代号为 y 的国家分别需要 cntx 名和 cnty 名员工部门每个员工有一个员工号 (1,2,3,......),工号连续,从 1开始。部长派遣员工的规则:

MISAYAONE的博客 2640

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C#2.0新特性系列文章转载

随着 Visual Studio 2005 的发布,C# 语言已更新为 2.0 版,它支持下列新功能: 泛型 该语言中添加了一些泛型类型,使得程序员能够实现程度很高的代码重用,获得更高的集合类性能。泛型类型只存在 arity 上的不同。也可以将参数强制为特定的类型。 迭代器 迭代器使得规定 foreach 循环将如何循环访问集合的内容变得更加容易。 分部类 分部类型定义允许将单个类型(比如某...

weixin_34259559的博客 76

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C#算数运算符深度解析:从整数除法到取模妙用

在编程语言中,算数运算符是实现数学计算的基础工具,其核心原理涉及数据类型、运算规则和内存操作。理解运算符的本质不仅能提升代码效率,还能避免常见陷阱,如整数除法截断和自增运算符的副作用。这些概念在工程实践中至关重要,尤其在处理数值计算、循环控制和状态管理时。例如,取模运算符(%)不仅用于判断奇偶性,还能高效实现循环访问和分页逻辑。本文通过实战练习,深入探讨C#中算数运算符的类型提升、前缀后缀区别及复合赋值优化,帮助开发者巩固基础,写出更健壮的代码。

weixin_33794672的博客 326

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

.NET学习目录

**.NET学习目录** 20120528Net基础加强 01练习点评 02语法规范 03简易计算器 04C#程序编写-编译 05面向对象介绍-什么是类-什么是对象-如何分析提取类和对象 06封装一个类来实现计算器 07猜拳游戏 08添加项目的引用 09变量作用域 20120529Net基础加强 01复习 02封装 03继承1 04继承2 05继承3-继承中的构造函数

沈的军的博客 1131

Lambda 表达式详解:从语法到原理

从六行样板代码压缩到一行核心逻辑,这正是 Lambda 最直观的价值。但 Lambda 表达式绝不仅仅是一个“语法糖”,它背后牵涉到函数式接口、类型推断、方法引用、闭包、invokedynamic 指令、Stream 流式处理等一系列重要概念。理解这些概念,才能真正用好 Lambda,并理解现代 Java 生态中大量基于函数式风格的框架代码。

油墨香^-^的博客 205

JAVA面试题(1~95)《上》

1、面向对象的特征有哪些方面?  答:面向对象的特征主要有以下几个方面:  - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。  - 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性...

ywl470812087的博客 4963

第1讲:初识C语言

在VS上写代码,我们是需要创建项目的,直接创建项目就可以了。在项目中就可以添加源文件和头文件。C语言把.c为后缀的文件成为源文件,把.h为后缀的文件称为头文件。头文件和源文件在VS中展示 头文件和源文件在磁盘上C语言中有一批保留的名字的符号,比如:int、if、return,这些符号被称为保留字或者关键字。(1)关键字都有特殊的意义,是保留给C语言使用的。

m0_68316692的博客 138
上一篇: 【C++进阶必备技能】:用constexpr替代const的4大时机,你知道几个?
下一篇: C# 11原始字符串新特性详解:3分钟搞懂多行文本处理最佳实践
DevPath
博客等级 码龄1年 179粉丝 2176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值