-3

オブジェクトをオブジェクトにキャストする必要がありSystem.Typeます。

C# は静的に型付けされているため、それは不可能であると読みました。

これは本当ですか?

はいの場合、どうすればこれを達成できますか?

Assembly myDll = Assembly.LoadFrom(dllData.Path);
Type manyAttribute = myDll.GetExportedTypes().FirstOrDefault(...);
Type multiplicityAttribute = myDll.GetExportedTypes().FirstOrDefault(..);

//Here is the problem
propertiesOnOtherFile = propertiesOnOtherFile.Where(t =>
    t.GetCustomAttributes(false).Any(ca => 
    !string.IsNullOrEmpty(((multiplicityAttribute)ca).PropertyName))); 

これは行です:

((multiplicityAttribute)ca).PropertyName)

これを行う他の方法はありますか?

編集:

多くの質問があるため、これが私の範囲です。

public class PocoClass
{
    [ManyAttribute]
    public ObjectX MyProp;
}

ManyAttribute declaration
{
    public string PropertyName;
}

ManyAttribute は、動的に読み込まれる DLL にあります。次に、上記の例のように、customAttribute (ManyAttribute) を ManyAttribute にキャストする必要があるため、PropertyName の値を確認します。

4

3 に答える 3

2

私はまだこれを理解していません...しかし、これはうまくいくはずです。

        IEnumerable<Type> propertiesOnOtherFile = new List<Type>(); //from somewhere?

        //Here is the problem
        propertiesOnOtherFile = propertiesOnOtherFile.Where(t =>
            t.GetCustomAttributes(false).Any<dynamic>(ca => 
            !string.IsNullOrEmpty(ca.PropertyName))); 
于 2012-11-28T18:52:11.220 に答える
0

あなたがやろうとしていることは意味がありません。

  • この行:Type multiplicityAttribute = myDll.GetExportedTypes().FirstOrDefault(..);バインドしようとしているタイプを動的に取得します。
  • 次に、それに対してキャストしようとしています:(multiplicityAttribute)ca)

キャストしたらどうしますか?

あなたは:

  • プロパティの名前を取得しようとしていますか?
  • いくつかのプロパティを持つオブジェクトタイプのリストを取得しようとしていますか?
  • 静的プロパティの値を取得しようとしていますか?
  • インスタンスプロパティの値を取得しようとしていますが、インスタンスを定義しているクラスの名前がわかりませんか?

あなたがやろうとしているように見えるのは、実際にはかなり具体的な何かを検査するための一般化可能なアプローチを作成することです。Reflectionを使用する場合は、通常、別の方向に進む方が簡単です。最初に特定のケースを解決してから、より一般化可能なアプローチにリファクタリングします。

于 2012-11-28T18:48:14.977 に答える