我可以使用匿名类的属性吗?
我有一个匿名的类:
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实例。 因此,如果您不控制检索和应用属性的代码,那么在您的情况下可能没有用处。