声明创建新对象的自定义属性
本文关键字:自定义属性 对象 创建 新对象 声明 | 更新日期: 2023-09-27 18:03:34
我不确定我要做的实际上是可能的。
我想创建一个新的自定义属性,当属性被声明时,用户创建一个新的对象。
我在看Lucene。我想添加一个自定义属性到我的类属性,所以我可以确定多个参数。这是我的自定义属性,它在一个Lucene。Net字段对象:-
[AttributeUsage(AttributeTargets.Property)]
public class PropertyAnalysed : Attribute
{
public Field Field;
public PropertyAnalysed(Field field)
{
this.Field = field;
}
}
当我在property上声明自定义属性时,我想做以下事情:-
[LuceneIndex("SampleIndex")]
public class SampleClass
{
[LuceneProperty]
[PropertyAnalysed(new Field("","",Field.Store.YES, Field.Index.ANALYZED))]
public int Id { get; set; }
}
但是,我得到以下错误:-
有谁能告诉我我能做什么吗?"属性参数必须是一个常量表达式typeof属性参数的表达式或数组创建表达式输入"
最简单的方法是采用几个单独的参数,并基于这些参数创建Field
实例。您只能配置带有编译时常量的属性,而new Field(...)
不是编译时常量。
您可能不需要所有参数-例如,Field.Index.ANALYZED
听起来在PropertyAnalysed
属性中是毫无意义的,因为所有字段都将具有…
就像错误提示所说的那样,您只能使用编译时常量—也就是说,只有在不使用new关键字的情况下才能声明原语。因为属性是类级的,所以不能传递任何需要新语句的东西。
类似地,属性构造函数也不允许声明传递无效的参数。属性也不能是泛型的——因此明确提到typeof(…)语句是允许的。最好的方法是从给定字符串中解析字段,并将字符串传递到属性中。如果这不是一个选项,你也可以指定一个类型和字符串来表示你想要查找的类和静态成员,并使用反射来通过名称查找属性。