c#3.0:使用传递出来的匿名类型

今天看了csdn上的一段视频讲解c#3.0的,虽然主讲人有点口吃但我还是坚持 听完了。里面有一句话我引起了我的兴趣,如果在结构上相同我们就可以对一个 匿名类型进行强转。看来在关键时刻我们还是可以直接操作匿名类型的虽然有点 麻烦。

我们知道匿名类型实际上就是.net自动生成的一个泛型类,并且只要字段名 相同类型相同就会使用同一个匿名类型。所以我们只要类用这个特性就可以把一 个通过参数传递的匿名类型进行强转了。

public T CastAnonymous<T>(object anonymous, T anonymousType)
{
   return (T)anonymous;
}
class User
{
   public string Name { get; set; }
}
public static void Main()
{
   var u = new User{ Name = "Lucifer" };
   var a = new { a = 26; u.Name; b = false };
   Print(a);
}
public void Print(object anonymous)
{
   var a = CastAnonymous(anonymous, new { a=0, Name = "", b = false });
   Console.WriteLine{"{0} - {1} - {2}", a.a, a.Name, a.b};
}

时间: 2025-01-30 09:14:57

c#3.0:使用传递出来的匿名类型的相关文章

C# 3.0中新匿名类型特性初体验

在去年PDC2005上,在发布C#2.0 (C# Whidbey)的同时,微软也同时展示了它们在C# 3.0上的一些计划.在提到一系列新的语言特性如语言集成查询(LINQ)等,Redmond同时也介绍了一个新的特性--匿名类型.本文详细介绍了匿名类型. 匿名类型定义 C#3.0规范将匿名类型描述为从对象初始化器(object initializer)自动推断和生成的元组类型.在你能够充分领会这一定义之前,你需要了解"对象初始化器"的概念,它是匿名类型特性的基础. 对象初始化器给一个对象

C# 3.0语言新特性(语言规范):5 匿名类型

规范 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P C# 3.0允许将new运算符用于一个匿名对象初始化器来创建一个匿名类型的对象. primary-no-array-creation-expression:...anonymous-object-creation-expression anonymous-object-creation-expression:new  anonymous-object-initializer ano

C#3.0语言新特性之匿名变量

20.2.1 引入匿名变量 在很多情况下,我们需要一种能够临时将一批具有一定关联的数据存放起来 的对象:或者在某些情况下,我们对仅一个对象的"形状"(如属性的名字和类 型等)比较感兴趣.例如Book类,当它和其他商品放在一起进行查询时,我们可 能仅对其名称和价格感兴趣,并且希望将这两种属性放在另外一个单独的临时对 象中以备今后使用.这时,我们关注的仅仅是这个临时对象具有Name和Price的 属性感兴趣,至于它究竟是什么类型就无关紧要了.然而,为了使这样一个对象 得以存在,我们不得不为

C#3.0新特性――隐含类型局部变量和匿名类型

C#3.0引进新关键字var,它是一个类型,可以用来声明局部变量. Code var I = 1; //int类型 var j = "reallypride"; //string类型 var k = new[] { 1, 2, 3, 4 }; //int[]类型 var x; //错误,必须初始化 var y = null; //错误,不可以为空 使用var变量要点: 1.使用var声明局部变量,编译器会根据后面的初始化表达式自动推断变量的类型,这个类型是强类型. 2.var变量在声明

asp.net C# 3.0 新特性 学习(二):匿名类型、扩展方法

这两天看了一下msdnwebcast上的visual studio 2008的系列课程,记录下所学的知识,以便加深记忆 1.匿名类型 顾名思义 匿名类型就是没有名字的类型.在C#3.0中允许我们在程序中声明一个临时的类型来存储数据,例如:    代码如下 复制代码 class Program      {          static void Main(string[] args)          {              //声明一个匿名对象,拥有 Name和Age 属性      

《圣殿祭司的ASP.NET4.0专家技术手册》----2-10 匿名类型

2-10 匿名类型 圣殿祭司的ASP.NET4.0专家技术手册C# 2.0有匿名方法(Anonymous Method),而C# 3.0又新增了"匿名类型(Anonymous Types)",它的目的是"提供一个简单的途径将一组只读的属性封装在一个对象之中",且在第一时间不必声明其明确类型. 2-10-1 匿名类型的由来 以下是一段匿名类型的变量声明,并以new的关键字进行初始化: 为什么要叫"匿名类型"?原因有几个: (1)传统多半是先建立一个

C# 3.0新特性初步研究 Part5:匿名类型

匿名类型(Anonymouse Type)--这年头什么多系都匿名了 : )在初始化的时候根据初始化列表自动产生类型的一种机制. 典型的代码:1class Program2    {3        static void Main(string[] args)4        {5            var x = new { a = 3, b = 5, c = "some text" };6            Console.WriteLine(x.a.ToString()

为匿名类型添加方法

1:这个做法不太常用 2:这个方法要传递两个参数, 打算用扩展方法解决这个问题, 但是扩展方法又不能用在匿名类型上, 有点郁闷   using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication8 { class Program { static void Main(string[] args) { Func<string, str

C# 3.0新特性系列:隐含类型var

一.神奇的var 在C#3.0中增加了一个变量声明var,这个声明和JavaScript 的 var类似,但 也有不同. 1. 相同点,它可以用var来声明任何类型的局部变量. 2. 不同点,它仅仅负责告诉编译器,该变量需要根据初始化表达式来推断变 量的类型,而且只能是局部变量. 二.相同点 它可以声明 var integer = 10; var name = "edisundong"; var numbers = new int[] { 1, 2, 3 }; 三.不同点 var仅仅是