1

特定のタイプが持つすべてのメソッドを表示するメソッドを作成しようとしています。
コードは次のとおりです。

public static void AllMethods(Type t)
    {
        var query = from x in t.GetMethods() select x;
        foreach (var item in query)
            Console.WriteLine(item.Name);
    }

私はこれの別のバージョンを試しました:

public static void AllMethods(Type t)
    {
        MethodInfo[] m = t.GetMethods();
        foreach (MethodInfo item in m)
            Console.WriteLine(item.Name);
    }

どちらのバージョンもコンパイルされますが、パラメーターを渡すと NullReferenceException が発生します。

static void Main(string[] args)
    {   
        AllMethods(Type.GetType("Z")); // Z is a class name

        Console.ReadLine();
    }

解決策は簡単だと思いますが、私の脳は今ではそれを理解できません)
何か提案はありますか?

4

1 に答える 1

3

私の推測ではZ完全修飾クラス名 (名前空間を含める必要があります) ではないか、mscorlib にも呼び出しアセンブリにも含まれていないクラスの名前です。別のアセンブリのクラスを使用するには、アセンブリ名も含める必要があります (厳密な名前が付けられている場合はバージョン番号などを含む)。またはAssembly.GetType()、たとえば同じアセンブリ内にある別の型を知っているなどの理由で、既にアセンブリへの参照がある場合は、どちらが簡単かを使用します。

私が正しいと仮定すると、AllMethodsメソッドを完全に無視する必要があります。代わりにこれを確認してください:

Type type = Type.GetType(...);
Console.WriteLine("type is null? {0}", type == null);

もちろん、コンパイル時に型がわかっている場合は、typeof.

于 2012-11-23T11:33:42.523 に答える