有没有办法动态设置匿名类型的属性名?
通常我们会这样做:
var anon = new { name = "Kayes" };
现在我想动态设置属性的名称(或标识符),以便这个名称可以来自XML文件或数据库。
谢谢大家的回答。不,我的需求绝对不值得所有繁琐的替代方案。我只是想让我的代码符合由我的团队领导开发的现有库。但我们决定更新该库以支持字典类型,这样就可以轻松解决了。
Pete,我真的很兴奋能够学习.NET 4.0中的动态类型。
谢谢。
有没有办法动态设置匿名类型的属性名?
通常我们会这样做:
var anon = new { name = "Kayes" };
现在我想动态设置属性的名称(或标识符),以便这个名称可以来自XML文件或数据库。
谢谢大家的回答。不,我的需求绝对不值得所有繁琐的替代方案。我只是想让我的代码符合由我的团队领导开发的现有库。但我们决定更新该库以支持字典类型,这样就可以轻松解决了。
Pete,我真的很兴奋能够学习.NET 4.0中的动态类型。
谢谢。
这是不可能的,因为即使类型是匿名的,它也不是动态类型。它仍然是静态类型,有关它的属性必须在编译时知道。
您可能需要查看.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);
}
}
}
不行。你想从动态信息构建静态结构。这样做行不通,好好想想。对于你的情况,使用字典。