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

一.匿名对象介绍

             上代码:

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. jfinal编码问题及解决

    使用jfinal出现了常见的编码问题情况 public void test() { Random r = new Random(); try { Connection conn = createCon ...

  2. C++点滴20130724

    warning c4627:"#include stdafx.h":在查找预编译头使用时跳过 原因: 1.没有添加 #include "stdafx.h" 2. ...

  3. Noip2016愤怒的小鸟(状压DP)

    题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...

  4. [Linux 使用(2)] 64位Linux下安装jboss-as-7.1 以及jdk1.7

    一.软件的下载 jdk下载地址:    http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.h ...

  5. Java基础总结--面向对象1

    ---面向对象的概念---1.面向过程与面向对象的区别面向过程:是一种思维习惯,解决一个问题的时候靠的是一个个方法调用--核心是动作面向对象:是一种更接近生活中解决问题的思维习惯,解决特定的问题靠对象 ...

  6. swift 之函数式编程(一)

    1. 什么是函数式编程? 函数式编程是阿隆佐思想的在现实世界中的实现, 它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及异变物件. 函数式编程的最重要基础是λ演算.而且λ演算的函數可以接受函 ...

  7. CentOS设置系统时间、硬件时间、以及定时校对时间

    CentOS设置系统时间和时区 一.设置时区 方法一:使用setup工具 setup 选择Timezone configuration 选择Asia/Shanghai 空格键勾选上System clo ...

  8. Java基础——数据类型

    Java中与C++的区别: 1.Java中没有无符号类型. 2.整型值和布尔值之间不能进行相互转换. 3.Java中不区分变量的定义和声明. 如:在C++中int i = 10;是一个定义,而exte ...

  9. 学习笔记TF059:自然语言处理、智能聊天机器人

    自然语言处理,语音处理.文本处理.语音识别(speech recognition),让计算机能够"听懂"人类语音,语音的文字信息"提取". 日本富国生命保险公司 ...

  10. 0_Simple__fp16ScalarProduct

    使用cuda内置无符号整数结构(__half2)及其汇编函数,计算两个向量的内积. 源代码: #include <cstdio> #include <cstdlib> #inc ...