首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeBuilder -添加属性

TypeBuilder -添加属性
EN

Stack Overflow用户
提问于 2015-05-15 16:06:36
回答 1查看 2.6K关注 0票数 2

我有一个助手类,它使用一个TypeBuilder来构造一个动态类型。它的用途如下:

代码语言:javascript
复制
var tbh = new TypeBuilderHelper("MyType");
tbh.AddProperty<float>("Number", 0.0f);
tbh.AddProperty<string>("String", "defaultStringValue");
tbh.Close();

var i1 = tbh.CreateInstance();
var i2 = tbh.CreateInstance();

现在,我希望添加对属性属性的支持(现有属性类型,而不是动态生成的类型),如下所示:

代码语言:javascript
复制
public class TypeBuilderHelper
    {
        public void AddProperty<T>(string name, T defaultValue, params Attribute[] attributes)
        {
            // ...
        }
    }

public class SomeAttribute : Attribute
    {
        public SomeAttribute(float a) { }
        public SomeAttribute(float a, int b) { }
        public SomeAttribute(float a, double b, string c) { }
    }

 var tbh2 = new TypeBuilderHelper("MyType2");
 tbh2.AddProperty<float>("Number", 0.0f, new SomeAttribute(0.0f, 1));
 tbh2.AddProperty<string>("String", "defaultStringValue");
 tbh2.Close();

 var i3 = tbh.CreateInstance();
 var i4 = tbh.CreateInstance();

但我不确定那是怎么回事。我正在使用PropertyBuilder创建属性,但是CustomAttributeBuilder需要一个构造函数签名和构造器args,其中我将拥有的只是一个构造属性的实例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-15 16:45:21

属性的实例在这里没有帮助,您需要定义构造函数和应该调用的值。一个简单的解决方案可能是更改AddProperty签名,并将params属性参数与params CustomAttributeBuilder参数交换,并构造生成器实例而不是属性。

代码语言:javascript
复制
var ci = typeof(SomeAttribute).GetConstructor(new Type[] { typeof(float), typeof(int) });
var builder = new CustomAttributeBuilder(ci, new object[] { 0.0f, 1 });
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30264032

复制
相关文章

相似问题

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