创建动态匿名类型变量

3
我可以创建一个匿名类型变量,然后以后再添加更多属性吗?
例如: var x = new { Name = "Ahmed" }; 现在想要添加Age属性,我该怎么做?
另一个问题:我在一些博客中看到过AnonymousType类型,这个类的名称空间是什么? 下面是一个示例http://www.codeproject.com/KB/cs/AnonymousTypesInCSharp.aspx

3
这种对象通常被称为“expando对象”。虽然C#不实现expando对象,但C# 4将通过使用“dynamic”关键字支持调用expando对象。如果需要使用此功能,请考虑使用Python、JScript或其他本地支持expando对象的语言。 - Eric Lippert
4个回答

6

第一个问题 - 你不能。

第二个问题 - AnonymousType 是那篇文章作者创建的类型。你必须下载他项目的源代码才能使用该类型。


0
不,对于您的应用程序来说这样做并不高效。 您确定不想引入某种类吗?
using System;
class Generic{

   public void doSomething(){}

   private string name;
   private string _othreFeature;

}

您可以随时扩展它的新功能。


0

这是一个非常合理的问题...我同时使用Java和C#,这是我的一个大烦恼...事实上,几乎所有的编程语言都有某种形式的匿名类型,比如PHP、JavaScript、C#、vb(全部),等等...

当你基本上将数据抛入一个对象中而不需要创建一个类时,这是一个非常有用的功能。

事实上,这正是LINQ所利用的...

var someObject (can be interable/Enumerable) = 
    from p in products
    where p.id == 123
    select new { productid };

嗨,你懂的... 这非常有用... :-)

干杯!


我知道这个很老了,但是你最后一行似乎有错误,我只是为其他读者澄清一下。如果你只想从一个LINQ语句中获取产品ID,你不会使用select(prod => new { prod.ID }),而是直接使用select(prod => prod.ID),根本不需要使用匿名类型。然而,如果你想将名称与ID配对,那么是的,你可以使用new{prod.Name, prod.ID}来创建一个匿名类型。再次强调,我知道这个问题很老了,但还是提一下。 - Mark A. Donohoe

0

不可以。

第二个问题:没有这样的东西,它可能是指编译器生成的类,你无法访问它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接