2013-05-01 6 views
5

以下の属性にプロパティ文字列を割り当てたいと思います。属性にプロパティを割り当てる方法

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

public class Extract 
{ 
    .... 
} 

抽出は私の文字列ですが、ハードコードは必要ありません。

+0

あなたは、プロパティ自体に属性を置くことはできますか? –

+0

何を呼び出すのですか?何がキーとして抽出されるべきかを定義するプロパティを持っているようですね。だから、もしあなたが 'KeyName'属性を持ってプロパティに置けば、抽出を行っているものはクラスのプロパティで' KeyName'属性を探し、その属性を持つプロパティからキーの名前を取得できます。それは理にかなっていますか? –

+0

@ChrisNielsenはい、それは理にかなっています...私はconst文字列を与えて属性に代入しました。 – user1990395

答えて

13

を割り当てるためのより良い方法上の任意の提案は、あなたはこれを行うことはできません。

属性は定数式でなければならない値。値はコンパイルされたコードに焼き付けられます。定数式を使用したくない場合は、属性を使用することはできません。これは、異なるアプローチを使用する必要がある場合に属性を使用している可能性があります。

あなたはproperties vs attributesにエリックリペットのブログ記事を読むことをお勧めします。もちろん

、あなたはそこに文字列リテラルを使用する必要はありません。

[ExtractKey(ExtractionKeys.Extraction)] 
... 


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

...でも、それでもコンパイル時定数です。あなたのコメントで

+0

ご連絡いただきありがとうございます。 – user1990395

+0

@ user1990395:私はあなたが何を意味するのか分かりません。あなたのコメントを明確にしてください。私は答えられるかもしれません。 –

+0

完全性のために、ハードリテラルを回避する別の共通(-ish)オプションは、サブクラスが実行時に通常のコードで実際の値を解決できるように、属性をサブクラス化することです。非常に興味深いリンクのために+1 –

0

はあなたが静的クラス内のすべての(文字列)の値を持っていると言います。静的クラスは読み取り専用のプロパティを持つクラスですか?つまり値が変わるのですか?そうでない場合は、静的クラスのそれらのプロパティの一部をconst文字列値に置き換えます。 Uは、これらの値を使用して属性を設定できます。

そう...

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

はなる:

[ExtractKey(MyClass.MyValue)] 
0

あなたのプロパティを変更したい場合は、次のように今、あなたの属性を設定することができ

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

アトリビュートを作成するには、次のコードを使用します:

ExtractKeyAttribute myAttribute = typeof(Extract).GetCustomAttributes(typeof(ExtractKeyAttribute), false)[0] as ExtractKeyAttribute; 
myAttribute.MyValue = "MyRunTimeValue"; 
関連する問題