匿名类型是C#中无需显式定义类名即可创建只读属性对象的语法结构,常用于LINQ查询。使用new关键字结合对象初始化器可创建匿名对象,如var person = new { Name = “Alice”, Age = 30 };,编译器自动推断属性类型并生成内部类,该类具有只读属性、值相等性比较和相同属性结构下的类型一致性,适用于局部临时数据封装,但不能跨方法直接返回或修改属性。

在C#中,匿名类型是一种轻量级的语法结构,用于创建没有显式定义类名的临时对象。它通常用于LINQ查询或需要快速封装一组只读属性的场景。
什么是匿名类型?
匿名类型允许你在不声明具体类的情况下创建对象。编译器会自动生成一个包含指定属性的内部类,并为这些属性提供只读访问。该类型只能在当前程序集内部使用,且不能跨方法传递(除非用object或泛型)。
匿名类型的实例一旦创建,其属性就不能修改——因为它们是只读的,通过自动实现的get访问器暴露。
如何创建匿名类型的只读对象?
使用 new 关键字配合对象初始化语法,但省略变量名左侧的类型名称:
var person = new { Name = “Alice”, Age = 30 };
上面这行代码创建了一个具有两个只读属性 Name 和 Age 的匿名对象。编译器推断出属性类型(string 和 int),并生成等效于如下结构的内部类:
internal class e__AnonType0 { public string Name { get; } public int Age { get; } public e__AnonType0(string name, int age) { Name = name; Age = age; } }
你不能写这个类名,但它在运行时存在。
常见用途和注意事项
常用于 LINQ 查询中投影数据:var results = from p in people
select new { p.FirstName, p.LastName };属性名可重命名:var item = new { FullName = person.Name, YearsOld = person.Age };两个匿名对象如果属性名、顺序、类型相同,则编译器生成同一类型:var a = new { X = 1, Y = 2 };
var b = new { X = 3, Y = 4 };
// a 和 b 是同一匿名类型不能作为方法返回值直接使用(除非返回 object 或 dynamic,但会丢失静态类型优势);适合局部使用。 支持 Equals、GetHashCode 基于值比较(即内容相等则视为相等)。基本上就这些。匿名类型帮你快速构造临时只读数据容器,简洁又安全。
以上就是C#的匿名类型是什么?如何创建临时的只读对象?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441765.html
微信扫一扫
支付宝扫一扫