如何在 C# 中使用匿名类型

匿名类型是一种没有名字的类型,可以使用 匿名类型 实现在一个类中定义一组只读属性,????????的是,这个类你不需要预先定义,本篇就来讨论下 匿名类型 是什么?为什么这么重要?如何在 C# 中使用好这个类型。

理解 匿名类型

本质上来说,匿名类型其实也是一个引用类型,通常用 var 来接这个引用,在匿名类型中可以定义一个或者多个属性,不过这些属性在匿名类型中会被自动做成 只读属性,和传统的的 class 相比,匿名类型中不能定义 字段,方法,只能包含只读属性。

使用 匿名类型

现在来研究一下具体代码,考虑如下的匿名类型。


var author = new
{FirstName = "Joydip",LastName = "Kanjilal",Address = "Hyderabad, INDIA"
};

在上面的代码中,author 就是匿名类型的实例,这个匿名类型中包含三个属性: FirstName,LastName,Address,可以看出这些属性都是 string 类型,有一点挺特别的,在给属性赋值之前你不必给该属性定义类型。

下面的代码段展示了如何输出这个匿名类型的三个属性。


Console.WriteLine("Name: {0} {1}", author.FirstName, author.LastName);
Console.WriteLine("Address: {0}", author.Address);

内嵌匿名类型

匿名类型除了平级定义,还可以嵌套定义,做法就是,在一个匿名类型的属性中再设置一个匿名类型,下面的代码展示了这种情况。


var author = new
{FirstName = "Joydip",LastName = "Kanjilal",Address = new { City = "Hyderabad", Country = "INDIA"}
};

接下来看一下如何去访问嵌套匿名类型中的属性。


Console.WriteLine("Name: {0} {1}", author.FirstName, author.LastName);
Console.WriteLine("Address: {0}", author.Address.City);

完整的代码如下,可供参考。


static void Main(string[] args)
{var author = new{FirstName = "Joydip",LastName = "Kanjilal",Address = new { City = "Hyderabad", Country = "INDIA"}};Console.WriteLine("Name: {0} {1}", author.FirstName, author.LastName);Console.WriteLine("Address: {0}", author.Address.City);Console.Read();
}

LINQ 中使用 匿名类型

LINQ 中的 Select 短语常常使用 匿名类型 来生成一个匿名类型集合。

考虑下面的 Author 类。


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

下面的代码片段展示了如何生成 authors 集合。


IList<Author> authors =
new List<Author>()
{new Author() { Id = 1, FirstName = "John", LastName = "Willey"} ,new Author() { Id = 2, FirstName = "Steve", LastName = "Smith"} ,new Author() { Id = 3, FirstName = "Bill", LastName = "Ruffner"} ,new Author() { Id = 4, FirstName = "Joydip",  LastName = "Kanjilal" }
};

下面的代码片段展示了如何利用 Linq.Select + 匿名类型 来返回这个 执行查询,这是什么意思呢?就是说这个 result 是一个 IEnumerable 接口,结果只是一个执行计划,还没有被真正执行。


var result = from a in authors select new
{Id = a.Id,Name = a.FirstName + "\t"+ a.LastName
};

如果想看到最后的执行结果,可以使用如下代码段:


foreach (var data in result)Console.WriteLine(data.Name);

下面是可供参考的完整代码。


public class Author{public int Id { get; set; }public string FirstName { get; set; }public string LastName { get; set; }}class Program{static void Main(string[] args){IList<Author> authors = new List<Author>() {new Author() { Id = 1, FirstName = "John",LastName = "Willey"},new Author() { Id = 2, FirstName = "Steve",LastName = "Smith"},new Author() { Id = 3, FirstName = "Bill",LastName = "Ruffner"},new Author() { Id = 4, FirstName = "Joydip",LastName = "Kanjilal"}};var result = from a in authorsselect new{Id = a.Id,Name = a.FirstName + "\t" + a.LastName};foreach (var data in result)Console.WriteLine(data.Name);Console.Read();}}

匿名类型允许你创建一个类型并且可以在事前不定义类型的情况下快速的初始化它,从 CLR 的角度看,匿名类型 也是一个引用类型,编译器在编译时,会给 每一个匿名类型 赋予一个 明确的名字。

匿名类型是继承于 Object 的,这就是为什么匿名类型只能转成 Object 的原因,还有一点要注意,方法,属性,事件,委托 的返回值不可以是匿名类型。

译文链接:https://www.infoworld.com/article/3536470/how-to-use-anonymous-types-in-csharp.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实用教程——组件及事件处理——布局管理(五种)

1.流式布局FlowLayout public void pack()调整此窗口的大小&#xff0c;以适合其子组件的首选大小和布局。如果该窗口或其所有者仍不可显示&#xff0c;则两者在计算首选大小之前变得可显示。在计算首选大小之后&#xff0c;将会验证该Window。窗口自动适应大小&#xff0c;使…

个人博客前端模板_腾讯前端开发工程师,教你极速搭建一个个人博客网站

作者&#xff1a; bookerzhao&#xff0c;腾讯 CSIG web前端开发工程师Github 为开源项目提供了用于静态页面展示的 Pages 服务&#xff0c;很多开发者都在上面托管了自己的静态网站和博客&#xff0c;不少开源项目的案例和文档页面也采用了这种方式。不过由于 Pages 的 CDN 节…

云原生时代 给予.NET的机会

.NET诞生于与Java的竞争&#xff0c;微软当年被罚款20亿美元。Java绝不仅仅是一种语言&#xff0c;它是COM的替代者&#xff01;而COM恰恰是Windows的编程模型。而Java编程很多时候比C编程要容易的多&#xff0c;更致命的是他是跨平台的。微软所推行.NET战略&#xff0c;并且C#…

java实用教程——组件及事件处理——布局的一个小实例

import javax.swing.*; import java.awt.*;public class BasicComponentDemo {Frame frame new Frame("这里测试基本组件");//定义一个按钮Button ok new Button("确认");//定义一个复选框组CheckboxGroup cbg new CheckboxGroup();//定义一个单选框&am…

非极大值抑制_非极大值抑制(non-maximum suppression)

摘自https://blog.csdn.net/qq_38906523/article/details/80195119摘自https://blog.csdn.net/xiexu911/article/details/80609298非极大值抑制NMS在目标检测&#xff0c;定位等领域是一种被广泛使用的方法。对于目标具体位置定位过程&#xff0c;不管是使用sliding Window还是…

TIOBE12月榜单:Java重回第二,Python有望四连冠年度语言

喜欢就关注我们吧&#xff01;文|白开水TIOBE 公布了 2020 年 12 月的编程语言排行榜。TIOBE 将在下个月公布 2020 年的年度编程语言&#xff0c;一年内排名率增长最高的编程语言将获得这一称号。目前&#xff0c;Python 以 1.90% 数据遥遥领先。其次分别是 C&#xff08;0.71%…

excel怎么在柱状图上加超链_如何让你的年终总结更符合领导心意,高薪员工必备的excel技能...

临近年底了&#xff0c;好多人都在写年终总结了&#xff0c;惯有的模式就是写一写这一年都做了哪些工作&#xff0c;有什么成绩&#xff0c;未来将如何完善等等......但是如何反应自己一年以来的成绩呢&#xff0c;如果单单是以文字的形式表述怕是不能让领导满意&#xff0c;甚…

java实用教程——组件及事件处理——对话框(dialog)

对话框&#xff1a; import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import java.awt.*; import java.awt.event.*;public class DialogDemo1 {public static void main(String[] args) {Frame frame new Frame("这里测试Dialog");Di…

Vue 凭什么成为 2020 年的一匹黑马

Vue 在前端开发中的火爆程度远超 React 和 Angular &#xff0c;无论是 BAT 等大厂&#xff0c;还是小型初创公司&#xff0c;Vue 都有着广泛的应用&#xff0c;其相关技术原理也是面试的必考知识点。Vue 的优势太过明显&#xff1a;基于 HTML 的模板语法&#xff0c;响应式的更…

python——学习笔记1

推荐阅读&#xff1a; 爆肝十二万字《python从零到精通教程》 Python菜鸟教程 1.python 的输入输出&#xff1a; 输入&#xff1a;input() 输出&#xff1a;print() 输出不换行&#xff1a;print(x,end"") 数据要和字符串同时输出的时候需要将数据转化为字符串类…

python rsa加密二进制文件_用Python中的RSA加密文件

公钥密码通常只用于少量数据。它很慢&#xff0c;很难正确使用。通常的做法是使用其他方法将非对称问题减少到由共享密钥提供安全性的问题&#xff0c;然后使用公钥加密来保护该共享密钥。例如&#xff1a;要加密文件&#xff0c;随机生成块或流密码(例如AES)的密钥。存储用此密…

开源C# Winform控件库《SunnyUI》强力推荐

本站(https://dotnet9.com)曾介绍过一款Winform开源控件库《HZHControls》&#xff0c;文章发布后不少朋友热情的咨询相关控件库信息&#xff0c;由此看来Winform在大家心中的地位还是挺高的。今天小编再分享一款新鲜出炉的 Winform 控件库库——SunnyUI&#xff0c;一起跟 Dot…

python——学习笔记2

python的数据结构 字符串&#xff1a; 字符串小写转大写&#xff1a; 字符串大写转小写&#xff1a; 删除空格&#xff1a; 空白是实际文本之前和/或之后的空间&#xff0c;通常您想删除这个空间。 strip()方法从开头或结尾删除任何空格&#xff1a; 替换字符串: replace()方…

庐山真面目之一 微服务的简介和技术栈

一、简介 这些年软件的设计规模越来越庞大&#xff0c;业务需求也越来越复杂&#xff0c;针对系统的性能、高吞吐率、高稳定性、高扩展等特性提出了更高的要求。可以说业务需求是软件架构能力的第一推动力&#xff0c;由于这些因素导致了软件架构思想和相关技术也在发生…

.net 读蓝牙数据_Linux内核曝严重蓝牙漏洞,影响多个版本

谷歌安全研究人员在Linux Kernel中发现了一组蓝牙漏洞(BleedingTooth)&#xff0c;该漏洞可能允许攻击者进行零点击攻击&#xff0c;运行任意代码或访问敏感信息。BleedingTooth漏洞分别被命名为CVE-2020-12351&#xff0c;CVE-2020-12352和CVE-2020-24490。其中最严重的漏洞是…

python——学习笔记3

日期&#xff1a; Python 日期和时间 函数&#xff1a; python 传不可变对象实例

GraphQL:拼接Stitching

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述&#xff0c;使得客户端能够准确地获得它需要的数据&#xff0c;而且没有任何冗余&#xff0c;也让 API 更容易地随着时间推移而演进&#xff0c…

python编_python编

1.加法运算&#xff1a;提示用户提供数值输出时&#xff0c;常出现的一个问题是&#xff0c;用户提供的是文本而不是数字。在这种情况下&#xff0c;当你尝试将输入转换为整数时&#xff0c;将引发ValueError异常。编写一个程序&#xff0c;提示用户输入两个数字&#xff0c;再…

算法题目——电梯(HDU-1008)

题目链接&#xff1a;HDU-1008 上楼&#xff1a;输入俩楼层之差 * 6s 停留层的5s 下楼&#xff1a;输入俩楼层之差 * 4s 停留层的5s #include<iostream> #include<vector>using namespace std; int main() {vector<int> vec;//用于存储每次的楼层数 vector…

.NET 云原生架构师训练营(模块二 基础巩固 引入)--学习笔记

2.1 引入http协议web server && web application framework.net 与 .net core asp .net coreweb api 示例CS&#xff1a;客户端-服务器BS&#xff1a;浏览器-服务器2.1.1 http协议请求过程消息结构请求方法状态码header请求过程1.URL解析2.DNS查询3.TCP连接4.处理请求5…