2017-08-18 7 views
0

すべてのクラスを基本クラスを継承しようとしています。system.Typeをユーザー定義の型に変換します

public void GetClassNames() 
    { 

    List<BaseClass> data = AppDomain.CurrentDomain.GetAssemblies() 
          .SelectMany(assembly => assembly.GetTypes()) 
          .Where(type => type != null && 
          type.IsSubclassOf(typeof(BaseClass))).ToList(); 
    } 

ただし、上記のコードではエラーが発生します。私はタイプBaseClassのにそれをしてくださいキャストはどうすればよい

を「暗黙的にタイプSystem.Collections.Generic.List<System.Type>' to System.Collections.Generic.Listを変換できませんか」?

+0

を 'System.Type'は、その型記述子です型に関するメタデータが含まれています。記述しているタイプの特定のインスタンスに関するデータは含まれていません。 'List '(これは 'Assembly.GetType()'の結果である)はそのような記述子を含むリストであり、 'List 'は 'BaseClass'(またはそのサブタイプ)の具象インスタンスを含むリストであり、 。あなたが本当に達成したいものを指定する必要があります。それ以外の場合は推測できません。 – dialer

答えて

4

BaseClassのサブクラスであるすべてのアセンブリのすべてのタイプを選択しています。したがって、すべての型を取得しますが、それらの型のインスタンスは取得しません。

本当に何をしたいですか?メソッド名はので、多分あなたが欲しい、GetClassNamesです:

public IEnumnerable<string> GetClassNames() 
{ 
    List<string> baseClassNames = AppDomain.CurrentDomain.GetAssemblies() 
     .SelectMany(assembly => assembly.GetTypes()) 
     .Where(type => type?.IsSubclassOf(typeof(BaseClass)) == true) 
     .Select(type => type.FullName) 
     .ToList(); 
    return baseClassNames; 
} 

あなたの代わりにあなたのBaseClassから派生するすべてのアセンブリ内のすべてのタイプの場合:

public IEnumnerable<Type> GetBaseClassSubTypesInCurrrentAssenblies() 
{ 
    List<Type> baseClassTypes = AppDomain.CurrentDomain.GetAssemblies() 
     .SelectMany(assembly => assembly.GetTypes()) 
     .Where(type => type?.IsSubclassOf(typeof(BaseClass)) == true) 
     .ToList(); 
    return baseClassTypes; 
} 
+0

私の説明が少し誤解を招く場合は申し訳ありません。基本型から派生したすべての型を取得したいと思います。 – Sugan88

+0

@ Sugan88:編集済み –

関連する問題