我可以使用匿名类的属性吗?

我有一个匿名的类:

var someAnonymousClass = new { SomeInt = 25, SomeString = "Hello anonymous Classes!", SomeDate = DateTime.Now }; 

反正有附加属性到这个类? 反思,其他? 我真的希望有这样的事情:

 var someAnonymousClass = new { [MyAttribute()] SomeInt = 25, SomeString = "Hello anonymous Classes!", SomeDate = DateTime.Now }; 

你实际上是在这里创build所谓的匿名types,而不是一个dynamic的types。

不幸的是,没有办法实现你正在做的事情。 匿名types是一个非常简单的不可变types,由名称/值对组成。

匿名types的C#版本只允许您自定义基础types上的一组名称/值对。 没有其他的。 VB.Net允许稍微更多的自定义,因为对可以是可变的或不可变的。 尽pipe如此,你也不能让它增加属性的types。

如果你想添加属性,你需要创build一个完整的types。

编辑 OP问,如果属性可以通过reflection添加。

没有这个不能做。 reflection是一种检查元数据而不是改变它的方法。 因此它不能用来添加属性。

另外,程序集中的types定义,一般来说是不可变的,在运行时不能改变[1]。 这包括向方法添加属性。 所以像技术的其他reflection也不能在这里使用。

[1]这是一个例外是ENC操作

首先,这是一个匿名types。 “dynamic”一词可能会让人们认为你正在谈论一个实现dynamic语义的C#4.0类,而你并不是。

其次,不,你不能做你所要求的。

如果你需要指定你的属性的属性,你会回到一个命名的types,即。 正常的类或结构。

可以使用TypeDescriptor.AddAttributes将属性添加到匿名实例。 随后可以使用TypeDescriptor.GetAttributes访问属性。

这不会将它们添加到该对象的Type实例。 因此,如果您不控制检索和应用属性的代码,那么在您的情况下可能没有用处。