2014-05-14 2 views
0

저는 무엇을 하려는지 확실하지 않습니다.새 개체를 만드는 사용자 지정 특성을 선언하십시오.

특성을 선언 할 때 사용자가 새 개체를 만드는 새 사용자 지정 특성을 만들고 싶습니다.

Lucene.Net에서 찾고있는 클래스 속성에 사용자 지정 특성을 추가하여 여러 매개 변수를 결정할 수 있습니다. 여기

내 사용자 정의 속성이며, 그것은 Lucene.Net 필드 객체한다 : - :

[LuceneIndex("SampleIndex")] 
    public class SampleClass 
    { 
     [LuceneProperty] 
     [PropertyAnalysed(new Field("","",Field.Store.YES, Field.Index.ANALYZED))] 
     public int Id { get; set; } 
    } 
- 나는 재산에 사용자 정의 속성을 선언 할 때

[AttributeUsage(AttributeTargets.Property)] 
    public class PropertyAnalysed : Attribute 
    { 
     public Field Field; 

     public PropertyAnalysed(Field field) 
     { 
      this.Field = field; 
     } 
    } 

, 나는 다음을 수행 할

"속성 인수 대해서 typeof,을 상수 식이어야 -이 :

그러나, 나는 다음과 같은 오류가 발생합니다속성 매개 변수의 표현식 또는 배열 생성 표현 유형 "

누구든지 내가 할 수있는 일을 도울 수 있습니까?

답변

4

가장 간단한 방법은 몇 가지 개별 매개 변수를 사용하여 이러한 매개 변수를 기반으로 Field 인스턴스를 만드는 것입니다. 컴파일 타임 상수로만 속성을 구성 할 수 있으며 new Field(...)은 컴파일 타임 상수가 아닙니다.

어쨌든 모든 매개 변수를 필요로하지 않을 수 있습니다 - 그것은 PropertyAnalysed 속성의 의미가있을 것 같은 모든 필드가있을 것입니다 확실히 예를 들어, Field.Index.ANALYZED, 사운드 ...

+0

감사합니다. – Derek

2

를 오류가 말한다처럼 컴파일 타임 상수만을 사용할 수 있습니다. 즉, 새로운 키워드를 사용하지 않고 선언 할 수있는 프리미티브 만 사용할 수 있습니다. 특성은 클래스 수준이므로 새 문이 필요한 요소는 전달할 수 없습니다.

마찬가지로 속성 생성자는 전달할 수없는 매개 변수를 선언 할 수 없습니다. 또한 속성은 generic 일 수 없으므로 typeof (...) 문의 명시 적 언급은 허용됩니다.

가장 좋은 방법은 지정된 문자열에서 Field를 구문 분석하고 문자열을 특성에 전달하는 것입니다. 그 옵션이 아닌 경우 조회 할 클래스 및 정적 멤버를 나타내는 유형 및 문자열을 지정할 수도 있습니다. reflection to find that property by name.

관련 문제