wil*_*ill 42 c# attributes anonymous-types
我有一个匿名课程:
var someAnonymousClass = new
{
SomeInt = 25,
SomeString = "Hello anonymous Classes!",
SomeDate = DateTime.Now
};
Run Code Online (Sandbox Code Playgroud)
无论如何将属性附加到此类?反思,其他?我真的希望这样的事情:
var someAnonymousClass = new
{
[MyAttribute()]
SomeInt = 25,
SomeString = "Hello anonymous Classes!",
SomeDate = DateTime.Now
};
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 50
你实际上在这里创建了所谓的匿名类型,而不是动态类型.
不幸的是,没有办法实现你想做的事情.匿名类型是一个非常简单的不可变类型,由名称/值对组成.
匿名类型的C#版本仅允许您自定义基础类型上的名称/值对集.没有其他的.VB.Net允许稍微更多的定制,因为对可以是可变的或不可变的.既不允许你用属性扩充类型.
如果要添加属性,则需要创建完整类型.
EDIT OP询问是否可以通过反射添加属性.
不能做到这一点.反射是一种检查元数据而不是改变它的方法.因此,它不能用于添加属性.
另外,程序集中的类型定义通常是不可变的,不能在运行时进行变异[1].这包括向方法添加属性.因此,这里也不能使用像技术这样的其他反射.
[1]唯一的例外是ENC操作
首先,这是一种匿名类型."动态"这个词可能会让人们认为你在谈论实现动态语义的C#4.0类,你不是这样.
其次,不,你不能做你所要求的.
如果需要为属性指定属性,则返回命名类型,即.普通的类或结构.
可以使用TypeDescriptor.AddAttributes向匿名实例添加属性.然后,您可以使用TypeDescriptor.GetAttributes访问属性.
这不会将它们添加到对象的Type实例中.因此,如果您不控制检索和应用属性的代码,则在您的情况下可能没有用.