一个关于C#3.5新特性中的匿名类型的问题,各位大神帮帮忙!

请看这段代码:
public List<Object> GetGoodsBySql()
{
StringBuilder strSql = new StringBuilder();
strSql.Append("SELECT name,cate ");
strSql.Append(" FROM Goods,Cate ");
strSql.Append(" where Goods.cateid=Cate.id ");

List<Object> list = new List<Object>();
using (DataTable table = DbHelperSQL.Query(strSql.ToString()).Tables[0])
{
foreach (DataRow row in table.Rows)
{
var mygoods = new { goodsname = (string)row["name"], catename = (string)row["cate"] };
list.Add(mygoods);
}
//再循环读出list中元素的各个属性的值,比如goodsname、catename的值
return list;
}
}
我就是想循环读出list中元素的各个属性的值,比如goodsname、catename的值,但是list已经指定为List<Object>泛型了,也就是说list里面的元素都是Object型了,这个时候怎么取得Object型里面的各个属性的值呢?

1. 不用匿名类型. 如果只用一次而且你真的不想单独为这个创建一个class, 用list = new List<Tuple<string, string>>(); 强类型的话后面就可以读出来了.
2. 如果一定要用匿名类型:
.NET 3.5 里面没有dynamic, 编译器不支持auto type inferring. 所以必须用reflection.
3. Jon Skeet提出过一个解决方案, 在: http://msmvps.com/blogs/jon_skeet/archive/2009/01/09/horrible-grotty-hack-returning-an-anonymous-type-instance.aspx. 这个方案利用了编译器把所有签名相同的匿名类型看作同一类型的功能. 虽然丑了点, 但是能用.
温馨提示:内容为网友见解,仅供参考
无其他回答

C#.netC#3.0新特性
C# 3.0 引入了多个新特性,旨在简化代码并提升灵活性。其中,隐式类型化允许变量无需指定类型,仅通过初始值推断,但需在声明时同时赋值,如:csharpcsharpclass LocalVariables: AppRunner.AbstractApplication { public override void Run() { int intValue = 5; string stringValue = "This...

在C#中什么是匿名方法?使用它有哪些好处?
匿名方法是C#2.0的一个新特性,顾名思义,匿名方法就是没有名称的方法。匿名方法最明显的好处就是可以降低另写一个方法的工作量;另外一个好处就是可以访问调用者的变量,降低传参数的复杂度。

JS和C# enum 枚举类型问题?
你可以先定义3个变量,然后根据选项给其中一个赋值。其实最简单的解决方案就是直接把选项传过去就好了。

C#程序设计标准教程的图书目录
8.3.1 添加控件 1488.3.2 对齐控件 1488.3.3 调整控件的前后顺序 1488.3.4 锁定控件 1498.3.5 删除控件 1498.4 文本类控件 1498.4.1 应用Label控件 1498.4.2 应用LinkLabel控件 1528.4.3 应用Button控件 1548.4.4 应用TextBox控件 1578.4.5 应用RichTextBox控件 1598.5 选择类控件 1628.5.1 应用ComboBox...

C#中() =>是什么意思
这是NET3.0以后的新特性 Lambda表达式 ,“Lambda 表达式”是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象,是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

如何充分利用C#匿名方法的平台优势
在C# 里 声明和使用委托要求你有委托和一个在委托被触发时具有匹配签名的能够执行的方法 以及一个将命名方法与委托关联的分配语句 作为C# 的新特性 匿名方法基本上能够提供与先前命名方法相同的功能 但是它已经不再需要一个在关联到委托之前就明确创建的方法了 你可以把匿名方法想象为一个实现与委托进行关联这项功...

ASP.NET3.5开发详解Ⅱ目录
第2章深入C#3.0语言的新特性,如隐式类型变量、数组声明、对象初始化、集合初始化、匿名类型和Lambda表达式等,详细阐述了这些特性的使用和限制。第3章关注LINQ,介绍了其起源、架构和查询方法,以及LINQ to Object、ADO.NET等不同数据访问方式。第4章讨论了DataSet设计工具和TableAdapter在数据访问中的...

谁给简单介绍一下C#?
结构体:一个C#的结构体与C++的结构体是相似的,因为它能够包含数据声明和方法.但是,不象C++,C#结构体与类是不同的而且不支持继承.但是,与Java相同的是,一个结构体可以实现界面. 预编译:C#中存在预编译指令支持条件编译,警告,错误报告和编译行控制.可用的预编译指令有: #define #undef #if #elif #else #...

C#.netC#2.0新特性
C# 2.0 新特性概览:1. 泛型的革新:泛型是C# 2.0的一大亮点,通过参数化数据类型,实现了代码的灵活复用。它强化了类型安全性,提高代码复用率,提升了效率,同时提供了清晰的约束,使得C#在处理多种数据类型时更为得心应手。2. 匿名方法的便捷:匿名方法引入了新的语法,使我们能够直接将代码绑定...

21天学通ASP.NET的目录
3.2 创建类与成员3.2.1 在Visual Studio中创建类文件3.2.2 对象的创建3.2.3 构造函数3.2.4 类的属性3.2.5 方法3.2.6 继承性3.2.7 多态性3.3 面向对象的抽象编程3.3.1 枚举3.3.2 集合3.3.3 接口3.3.4 泛型3.4 .NET 3.5的新特性3.4.1 匿名类型3.4.2 类和集合的初始化器3.4.3 扩展方法3.4.4 Lambda...

相似回答
大家正在搜