动态设置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#版本,请参见: