首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取对象实例上自定义属性的*值*?

获取对象实例上自定义属性的*值*?
EN

Stack Overflow用户
提问于 2011-10-25 13:07:51
回答 1查看 5.1K关注 0票数 3

使用.NET 4,C#

假设我有类Info,它扩展了CustomTypeDescriptor。类Info的实例有一个<string, object>对字典,在运行时加载。

我希望能够将字典键公开为属性(这样每个Info实例都有不同的属性)。属性的值应该是字典中相应的值。

我有时间揭露自己的财产

代码语言:javascript
复制
    public override PropertyDescriptorCollection GetProperties()
    {

        var orig = base.GetProperties();
        var newProps = dictionary.Select( kvp => 
                       TypeDescriptor.CreateProperty(
                           this.GetType(), 
                           kvp.key, 
                           typeof(string)));
        return new PropertyDescriptorCollection(
                   orig.Cast<PropertyDescriptor>()
                   .Concat(newProps)
                   .ToArray());
    }

问题是,我如何获得他们的价值观?

代码语言:javascript
复制
var info = new Info(new Dictionary<string, object>{{"some_property", 5}};
var prop = TypeDescriptor.GetProperties(i_info)["some_property"];
var val = prop.GetValue(i_info); //should return 5

在调用prop.GetValue()时,我发现获得控制的唯一方法是重写GetPropertyOwner(PropertyDescriptor pd),但据我理解,它希望我返回另一个具有匹配的real (已编译)属性的类型的实例。

我希望能够自己编写该属性的实际实现(在本例中,返回键与属性名称匹配的字典中的值)。

这个是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2011-10-25 13:45:19

我对CustomTypeDescriptor的理解是,它允许绑定将额外的属性公开给(比如说,网格),这些属性实际上并不存在于类中。它不是扩展CLR从而使您的实际类公开属性的东西。

如果您想要实际的CLR属性,那么您需要查看DynamicObjectExpandoObject,以获得我认为您需要的那种功能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7889721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档