本篇内容接着上一篇继续讲述,本篇简单讲解匿名对象

一.匿名对象介绍

             上代码:

var result=new {
ID=,
Name="张三",
Age=
};

若想输出这个新对象的Age属性的内容,可以让Console.WriteLine深入到该对象的下一层,Console.WriteLine(reuslt,1)即可

虽然匿名对象没有对象名,不过仍然是类型---编译器将自动为其生成名字。代码的result将指向上述自动创建的类型的一个实例。该类型有三个属性:ID,Name,Age。这三个属性是根据初始化器中的声明而推断得出的。

二.匿名对象属性一致的问题

var result1=new {ID=2,Name="李四",Age=33};
var result2=new {ID=3,Name="张三",Age=11};
var result3=new {ID=3,Name="张三"};"

上述代码中result1和result2属于同一个类型的两个不同的实例。但是result3和result1、result2是属于不同的类型,因为属性不一致。

注意:上述代码中如果属性的顺序不一致,导致的类型 也是不一致的。

 三.匿名对象的限制

1.使用匿名类型时,离开定义该类型的方法,我们将无法再以强类型的方式使用此匿名类型的实例。若要使在此方法内,我们希望将某个匿名类型的实例传递给某一方法的话,被传递的方法的这个参数的类型必须是object.

2.在定义匿名类型的方法之外,我们只能使用反射来进一步操作该类型的实例。

3.定义该匿名类型的方法的返回值类型必须是object,否则匿名类型将不能够作为方法的返回值。

4.匿名类型的实例时不可变的,一旦创建了一个匿名类型的实例,那么该实例的各个属性值就将永远被确定下来了,所有的属性只能get,不能set。

     四.匿名对象的不可变特性

              因为匿名类型具有不可变的特性,所以其所有的实例都有稳定的散列值(hash code)。

匿名对象不可变的目的:永远不会改变的对象能够大大降低程序设计中对并发控制的处理难度。这在后续的PLINQ中起着非常关键的作用。(在某个对象在某个时刻的快照的时候无需考虑其可能带来的不一致的副作用)。

LINQ学习系列-----1.4 匿名对象的更多相关文章

  1. LINQ学习系列-----1.3 扩展方法

    这篇内容继续接着昨天的Lambda表达式的源码继续下去.昨天讲了Lambda表达式,此篇讲扩展方法,这两点都是Linq带来的新特性.    一.扩展方法介绍   废话不多说,先上源码截图: 上图中Ge ...

  2. LINQ学习系列-----2.3 迭代器带来的延迟查询

    此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行                      废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 fro ...

  3. Linq学习系列

    LINQ之路系列博客导航 http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html LINQ体验系列文章导航 http://www ...

  4. LINQ学习系列-----3.1 查询非泛型集合

    一.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继承了IEnumera ...

  5. LINQ学习系列-----3.1 查询非泛型集合和多个分组

    一.查询非泛型集合 1.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继 ...

  6. Linq学习系列-----1.1 Lambda表达式介绍

     1.1  Lambda表达式介绍 下图就是一个典型的Lambda表达式. instance:输入参数 =>:Lambda操作符 instance.MemoryCount>=20*1024 ...

  7. LINQ学习系列-----2.2 迭代器

    在学习本篇迭代器之前,强烈建议可以先学习一位具有工匠精神博主的文章,链接如下: 农码一生---先说IEnumerable,我们每天用的foreach你真的懂它吗? 本篇文章,是在该博主博文的基础上再次 ...

  8. LINQ学习系列-----2.1 一个Linq语句

    Linq语句介绍 先上源码: 上述代码涵盖了Linq新特性: 代码解析: 针对本文中的几点特性,前面有文章进行阐述.

  9. Linq学习系列-----1.2 一个简单方法的改进思考及不同的执行形式

    一.普通模式: #region 模式1 public Form1() { InitializeComponent(); GetProcessByJudge(); } public bool Memor ...

随机推荐

  1. JS中replace()用法举例

    语法: string.replace(regexp,replacement) 参数: regexp:声明了要替换的模式的RegExp对象.如果该参数是一个字符串,则将它作为要检索的直接量文本模式,而不 ...

  2. ES6-字符串的扩展-模板字符串

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. windows将某个应用加入开机启动项的解决办法

    找到计算机以下位置,将要加入开机启动项的程序的快捷方式直接Copy到该目录下,下次开机该程序则会自动启动 C:\Users\pc\AppData\Roaming\Microsoft\Windows\S ...

  4. jQuery Ajax跨域问题简易解决方案

    场景:由于业务需求,需要在一个页面显示另外一个页面,并且右键查看源代码看不到一条链接. 实现方式:使用iframe来显示这个首页,至于首页的地址则使用jQuery Ajax来获取.html代码如下: ...

  5. quartz 定时任务

    面试问到了,回答的不是很全面,丢人呀.研究过,用过的东西. 2年多没用,回忆一下: Quartz任务调度框架和Spring集成使用:定时执行一些任务 核心:调度器.任务和触发器. 调度器负责调度各个任 ...

  6. php 不能取得session值的一个解决方法

    1.确认下<?php session_start(); ?> 这句话是不是在<HTML> 标志之前.  不在的话,请放到<HTML> 标志之前. 2.如果上面操作后 ...

  7. mui的上拉加载更多 下拉刷新 自己封装的demo

    ----------------------------------------------- 这是一个非常呆萌的程序妹子,深夜码的丑代码------------------------------- ...

  8. JavaScript 中的对象引用

    ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型.也有其他的叫法,比如原始类型和对象类型,拥有方法的类型和不能拥有方法的类型,还可以分为可变类型和不可变类型,其实这些叫法都是依据这两 ...

  9. 阿里JAVA开发手册零度的思考理解(二)

    转载请注明原创出处,谢谢! 说在前面 人生的大道上默默地走,就必须要有一盏灯亮着为你引导方向!而这盏灯抑或只是一句话,一句鼓励,一个赞美,一次承认,一次认可,一次相识一次交流-- 上篇文章:阿里JAV ...

  10. Hdu 1698(线段树 区间修改 区间查询)

    In the game of DotA, Pudge's meat hook is actually the most horrible thing for most of the heroes. T ...