动态设置C#匿名类型的属性名称
有没有办法动态设置匿名类型的属性名 通常我们会这样做:动态设置C#匿名类型的属性名称,c#,properties,anonymous-types,C#,Properties,Anonymous Types,有没有办法动态设置匿名类型的属性名 通常我们会这样做: var anon = new { name = "Kayes" }; 现在,我想动态设置属性的名称(或标识符),以便该名称可以来自XML文件或数据库 谢谢你们的回答。不,我的需要绝对不值得所有乏味的选择。我只是想让我的代码符合我的团队领导开发的现有库。但是我们决定更新库以支持字典类型,这样就可以很容易地解决这个问题 Pete,我很高兴能在.NET4.0中学习动态类型 谢谢。不是没有大量的思考,可能比你对利用你正在做的事情更感兴趣。也许您
var anon = new { name = "Kayes" };
现在,我想动态设置属性的名称(或标识符),以便该名称可以来自XML文件或数据库
谢谢你们的回答。不,我的需要绝对不值得所有乏味的选择。我只是想让我的代码符合我的团队领导开发的现有库。但是我们决定更新库以支持字典类型,这样就可以很容易地解决这个问题 Pete,我很高兴能在.NET4.0中学习动态类型
谢谢。不是没有大量的思考,可能比你对利用你正在做的事情更感兴趣。也许您应该改用字典进行研究,键值是属性名。编译器必须知道属性名,否则它无法为您创建匿名类型
因此,不,这是不可能的,除非在编译时知道实际的属性名(通过数据库或其他东西生成的VS)。这是不可能的,因为即使类型是匿名的,它也不是动态类型。它仍然是一个静态类型,必须在编译时知道它的属性
您可能想查看.NET 4.0“dynamic”关键字以生成真正的动态类。可以使用动态属性,但对于您的需要来说,这可能有些过分了……不。您需要从动态信息构造静态结构。想一想,这行不通。为你的案件使用字典 如前所述,您不能更改属性名称;例如,您将如何针对它编写代码?但是,如果这是用于数据绑定,则可以在运行时使用一些技巧来弯曲属性的显示名称,例如
ICustomTypeDescriptor
/TypeDescriptionProvider
(以及自定义PropertyDescriptor
)
大量的工作;它需要真正值得一试
另一个选项是自定义属性:
using System;
using System.ComponentModel;
using System.Windows.Forms;
class MyDisplayNameAttribute : DisplayNameAttribute {
public MyDisplayNameAttribute(string value) : base(value) {}
public override string DisplayName {
get {
return @"/// " + base.DisplayNameValue + @" \\\";
}
}
}
class Foo {
[MyDisplayName("blip")]
public string Bar { get; set; }
[STAThread]
static void Main() {
Application.EnableVisualStyles();
using (Form form = new Form {
Controls = {
new PropertyGrid {
Dock = DockStyle.Fill,
SelectedObject = new Foo { Bar = "abc"}}
}
}) {
Application.Run(form);
}
}
}
有关最新的C#版本,请参见: