2011-02-25 3 views
1

나는 사용자 정의 속성이 RouteAttribute라고 만들었습니다 나는 나의 위치 URL을 처리하는 쉬운 방법이있다.속성 도움, 컴파일러 오류

하지만 기본을 추가 컴파일러 오류 점점에 문제가 :

[Route("~/MyPage/Home.aspx", new RouteValueDictionary { { "query", "value" } })] 
public string HomePage 
{ 
    get { return "Home" } 
} 

혼란을 방지하기 위해, 값이 routeurl로 설정되어, 실제 URL이 나는, 이것에 대한 이유는, 속성에서입니다 기존 사이트를 변환, 오히려 내가 페이지로 끝났어요, 일단 모든 곳에서 링크를 변경하는 대신, 나는 내 수업에 가서 오류주는 새 페이지

에 실제 URL을 변경 :

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

답변

1

속성 생성자의 인수 값은 메타 데이터에 저장됩니다. 그것은 당신이 지정할 수있는 것에 대해 심각한 제한을가집니다. 단순한 값 유형, typeof from Type 및 이러한 값의 단순한 1 차원 배열. 컴파일러가 불평하는 코드는 허용되지 않습니다. 연산자에는 코드가 필요합니다.

특성 생성자 본문에서 수행 할 수있는 작업에 대한 제약은 없습니다.이 코드는 리플렉션 코드가 특성을 검사 할 때 나중에 실행됩니다. 이와 비슷한 제안 :

public class RouteAttribute : Attribute 
{ 
    public RouteAttribute(string url, string query, string value) { 
     this.url = url; 
     this.dunno = new RouteValueDictionary(query, value); 
    } 
    // etc.. 
} 
... 
[Route("~/MyPage/Home.aspx", "query", "value")] 
public string HomePage 
{ 
    get { return "Home" } 
} 

이것은 분명히 필요합니다. 사전이 무엇을 의미하는지는 잘 모릅니다. 부작용이 있거나 리소스가 필요하다는 점에주의하십시오. 속성이 생성 될 때 런타임 상태를 알 수 없습니다.

+0

최상의 해결책은 아니지만 작동합니다. 앞으로 더 나은 방법을 연구 할 것입니다. 감사합니다. – jaekie

1

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

이 오류는 문제가 무엇인지 정확하게 알려줍니다.

new RouteValueDictionary { { "query", "value" } } 

일정한 표현이 아닌과 typeof 발현되지 배열 생성 식 아니다

같이, 이것은 불법이다.