2

クラスに多くの静的メソッドがあり、特定のメソッドがクラス X にあるかどうかを取得し、そうである場合はそれを呼び出したいと考えています。私はこれでチェックしました:

if (Type.GetType("Homework.Homework.Functions").GetMethod(methodName) == null)
            {
                Console.WriteLine("No such method.\nPress any key to restart the program");
                Console.ReadKey();
                Console.Clear();
                Main();
                return;
            }
            else
                Type.GetType("Homework.Homework.Functions").GetMethod(methodName).Invoke(null, parametersArray); // Invoking the method.

しかし、if() を含む行に System.NullReferenceException が表示されます。

プログラムの開始:

namespace Homework
{
class Homework
{
    static void Main()
    {

クラスの宣言:

public class Functions
    {

クラス Functions はクラス Homework 内にあると言うべきでしょう。

このエラーを解決するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

11

問題は、ネストされた型がIL 名でa+ではなくa で区切られていることです。.あなたが書く場合:

Console.WriteLine(typeof(global::Homework.Homework.Functions));

次に、CLR に関する限り、完全修飾名が表示されます。

あなたが望んでいるのは:

Type.GetType("Homework.Homework+Functions")

本当に名前で取得する必要があると仮定すると、この種のことは可能な限り避けてください。typeofコンパイル時に型がわかっている場所ならどこでも使用できます (別のアセンブリにある場合は、喜んで参照してください)。

同じアセンブリ内から呼び出している場合は機能します。別のType.GetTypeアセンブリから呼び出している場合は、名前もアセンブリで修飾する必要があります。

また、名前空間と同じ名前をクラスに付けないことを強くお勧めします。

于 2013-09-09T15:58:39.837 に答える
1

にアセンブリ修飾名を指定する必要がありますGetType(string)。Homework クラスをインスタンス化し、その

GetType().FullName 
于 2013-09-09T15:58:52.777 に答える