2017-07-27 12 views
-1

協力することを拒否します。 Animal.dllには、犬、猫などのクラスに属性[Method("cat")]などがあります。私の辞書には、この属性名を文字列として追加し、タイプ(dog, Dog)とタイプしたいと思います。私の問題は、私のプログラムがそれをしないということです。変数動物でプログラムを実行した後、私は0点を持っています。私が欲しいものを達成するために私は何を変えるべきですか?リフレクションと.NETのコアの属性は、私はクラスを持っている

答えて

0

問題は、この行である:

var m = assembly.GetCustomAttribute<Method>(); 

この行は、アセンブリの属性を取得しています。したがって、アトリビュートがアセンブリに適用されていない場合、nullが戻されます。

まず、アセンブリ内の型を取得してから、各型の属性の有無を確認します。これ以上の何か:

foreach(Type type in assembly.GetTypes()) 
{ 
    var attr = assembly.GetCustomAttribute<Method>(); 
    if (attr!=null) 
    { 
     animals.Add(attr.Name, type); 
    } 
} 
+0

しかし、今私のDLLが表示されません。私はクラスライブラリとしてプロジェクト動物を設定し、メインではそれへの参照を追加します。しかし、今あなたのコードを固定してあなたの無限に実行:( – nju

+0

あなたは無限に実行されていることを明確にすることはできますか?つまり、どの行が止まっているか、ループですか?あなたはまだそれが間違っていることを見つけるために、デバッガを使用する必要があります。私の推測は、あなたが問題を起こしているという後のどこかであるということです – Chris

+0

私のコードをデバッグすると、アセンブリテーブルのAnimalが表示されます。Animalには、属性[Method( 'dog)]を持つDogクラスがあります。しかし、あなたのコードを追加してデバッグを開始すると、アニマルのようなものは他のアセンブリを繰り返し処理するだけです。 – nju

関連する問題