2013-05-01 4 views
5

아래 속성에 속성 문자열을 지정하고 싶습니다.속성에 속성을 할당하는 방법

[ExtractKeyAttribute(**"Extraction"**)] 

public class Extract 
{ 
    .... 
} 

추출은 제 문자열이지만 하드 코드는 필요 없습니다. 할당하는 더 좋은 방법에 대한 제안

+0

속성 자체에 속성을 넣을 수 있습니까? –

+0

전화하는 방법? 무엇을 키로 추출해야하는지 정의하는 속성이있는 것 같습니다. 아마'KeyName' 속성을 가지고 속성에 두었다면, 추출을 수행하는 모든 것이 클래스의 속성에서'KeyName' 속성을 찾은 다음 그 속성을 가진 속성에서 키의 이름을 얻을 수 있습니다. 말이 돼? –

+0

@ChrisNielsen 네, 이해가 되네요 ... 저는 const 문자열을주고 속성에 할당했습니다. – user1990395

답변

13

당신은 할 수 없습니다.

속성 값 이어야하며 상수 표현식이어야합니다. 값은 컴파일 된 코드로 구워집니다. 상수 표현식을 사용하고 싶지 않다면 속성을 사용할 수 없으며 그렇게해서는 안됩니다. 다른 접근법을 사용해야 할 때 속성을 사용한다는 의미 일 수 있습니다.

에릭 리 퍼트 (Eric Lippert)의 블로그 게시물 properties vs attributes을 읽어 보시기 바랍니다.

물론 문자열 리터럴을 사용할 필요는 없습니다. 당신은 가질 수 :

[ExtractKey(ExtractionKeys.Extraction)] 
... 


public static class ExtractionKeys 
{ 
    public const string Extraction = "Extraction"; 
} 

...하지만 여전히 컴파일 타임 상수입니다.

+0

답장을 보내 주셔서 감사 드리며 링크 – user1990395

+0

@user1990395를 통해 확인하겠습니다. 귀하가 무슨 뜻인지 모르겠군요. 귀하의 의견을 명확히 해주시면 답변을 드릴 수 있습니다. –

+0

완전성을 위해, 하드 리터럴을 피하기위한 또 다른 공통 (-ish) 옵션은 서브 클래스가 런타임시 실제 코드에서 일반 값으로 해석 할 수 있도록 속성을 서브 클래스 화하는 것입니다. –

0

귀하의 의견에 (정적) 클래스에 모든 (문자열) 값이 있다고합니다. 정적 클래스가 읽기 전용 속성을 가진 클래스입니까? 내 말은, 가치가 변하는 것인가? 그렇지 않은 경우 정적 클래스의 일부 속성을 const 문자열 값으로 바꿉니다. U는이 값을 사용하여 속성을 설정할 수 있습니다.

그래서 ...

static class MyClass 
{ 
    public string MyValue {get;} 
} 

이 될 것입니다 :

static class MyClass 
{ 
    public const string MyValue= "MyValue"; 
} 

이제 속성을 설정할 수 있습니다 다음과 같이

[ExtractKey(MyClass.MyValue)] 
0

을 당신의 속성을 수정하려는 경우 속성을 사용하는 경우이 코드로 수행 할 수 있습니다.

ExtractKeyAttribute myAttribute = typeof(Extract).GetCustomAttributes(typeof(ExtractKeyAttribute), false)[0] as ExtractKeyAttribute; 
myAttribute.MyValue = "MyRunTimeValue"; 
관련 문제