利用匿名属性可以用很简洁的语法来自动声明不可变(immutable)的元组(tuple)类型。

属性:在字段用来表示类型和对象的状态的前提下,希望状态不被随意的更改,字段一般应该设置为private,这也符合面向对象编程的数据封装,而可以通过方法来更改字段的值,这时候属性的出现简化了这些语法。

var o=new {property1 = expression1, ....,propertyN = expressionN}

编译器会推断每个表达式的类型,创建推断类型的私有字段,为每个字段创建公共只读属性,并创建一个构造器来接受这些表达式。在构造器中根据表达式结果来初始化私有只读字段。

除此之外,还会重写Objects的Equals,GethashCode和ToString方法。属性只读防止HashCode被改,而匿名实例能放在哈希表集合中,就防止了哈希码被改后找不到key。

var people = new[]
{
new {Name = "James", Age=}
new {Name = "Obama", Age=}
}

匿名类型经常被用与LINQ(Language Intergrated Query)配合使用。

string myDocs=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var query=
from pathname in Directory.GetFiles(myDocs)
let LastWriteTime = File.GetLastWriteTime(pathname)
where LastWriteTime > (DateTime.Now - TimeSpan.FromDays())
orderby LastWriteTime
select new {Path = pathname, LastWriteTime }

Path = pathname也不是必要的,即之后的属性名就为pathname,这个前面只是定义属性名,倘若不定义就为原名。

System.Tuple:

public class Tuple<T1,T2,T3,T4,T5,T6,T7,TRest>

var t=Tuple.Create(,,,,,,,Tuple.Create(,))

System.Dynamic.ExpandoObject

dynamic e = new System.Dynamic.ExpandoObject();
e.x = ;
e.y = "Henry";
e.z = null; foreach (var v in (IDictionary<string,Object>)e)
{
Console.WriteLine(v.Key+v.Value);
}

匿名属性 anonymous property的更多相关文章

  1. C#匿名类型 - Anonymous Types

    [C#匿名类型 - Anonymous Types] Anonymous types provide a convenient way to encapsulate a set of read-onl ...

  2. Android属性(property)机制

    1. 属性简介 Android里有很多属性(property),每个属性都有一个名称和值,他们都是字符串格式.这些属性定义了Android系统的一些公共系统属性.比如: [dalvik.vm.dexo ...

  3. Python进阶之“属性(property)”详解

    Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情.在这篇文章中,我们将看到如何能做以下几点: 将类方法转换为只读属性 重新实现一个属性的setter和getter ...

  4. Android动画主要包含补间动画(Tween)View Animation、帧动画(Frame)Drawable Animation、以及属性动画Property Animation

    程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animatio ...

  5. php中的匿名函数(Anonymous functions)和闭包函数(closures)

    一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数.最常用的就是回调函 ...

  6. Objective-C:属性(@property)

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  7. C# 属性(Property)和字段(Field)的区别

    导读: 近期学习过程中发现了一些问题,我的学习只是学习,敲代码就是敲代码,没有加入思考,也不问为什么就直接去敲人家写好的例子去敲,把知识都学死了,逐渐散失了思考能力,所以学习的兴趣大打折扣,正如那句话 ...

  8. 始终使用属性(Property),而不是字段(Data Member)

    1.始终使用属性(Property),而不是字段(Data Member) C# 属性已经晋升为一等公民,如果你的类中还有public的字段,Stop.访问属性和字段的方式是一样的,但是属性是用方法( ...

  9. python基础-abstractmethod、__属性、property、setter、deleter、classmethod、staticmethod

    python基础-abstractmethod.__属性.property.setter.deleter.classmethod.staticmethod

随机推荐

  1. 在C#中使用类golang信道编程(一)

    BusterWood.Channels是一个在C#上实现的信道的开源库.通过使用这个类库,我们可以在C#语言中实现类似golang和goroutine的信道编程方式.在这里我们介绍3个简单的信道的例子 ...

  2. centos下的activemq的配置及PHP的使用

    一.安装JDK 1.下载JDK(官网:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...

  3. UIView的属性

    .alpha 设置视图的透明度.默认为1. // 完全透明 view.alpha = ; // 不透明 view.alpha = ; .clipsToBounds // 默认是NO,当设置为yes时, ...

  4. MongoDB基础教程系列--未完待续

    最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作 ...

  5. MyBatis源码解读(1)——SqlSessionFactory

    在前面对MyBatis稍微有点了解过后,现在来对MyBatis的源码试着解读一下,并不是解析,暂时定为解读.所有对MyBatis解读均是基于MyBatis-3.4.1,官网中文文档:http://ww ...

  6. 用JS添加和删除class类名

    下面介绍一下如何给一个节点添加和删除class名 添加:节点.classList.add("类名"): 删除:节点.classList.remove("类名") ...

  7. java 解决时间相减问题

    比如 Date currentTime ="2011-06-20 9:23:50"; Date endTime="2011-06-21 10:33:56"; 要 ...

  8. ubuntu16.04的下载安装

    工具/原料   ubuntu-16.04-desktop-amd64.iso ubuntu-16.04-desktop-i386.iso UltraISO最新版 (自己找渠道去下载,用来将镜像文件烧到 ...

  9. linux 命令(alias , unalias , install ,ar , arch ,uname )

    https://linux.die.net/man/ http://man.linuxde.net/ user commands 1.alias [ˈālēəs]:别名 alias --help al ...

  10. Java虚拟机原理

    1.编译机制 分析和输入到符号表: 词法分析:将代码转化为token序列 语法分析:由token序列生成抽象语法树 输入到符号表:将类中出现的符号输入到类的符号表 注解处理: 处理用户自定义注解,之后 ...