2

この関数を使用して、文字列からいくつかの列挙型の型を取得します。

システム列挙型に使用するとType.GetType("System.ConsoleColor")、タイプが取得されました。

しかし、宣言した列挙型に使用すると、次のようになります

Type.GetType("SignalModule.Implementation.SubscriberType")

ヌルになりました

即時ウィンドウでこの注文をキー入力しようとしたとき: *

SignalModule.Implementation.SubscriberType

私は真実のタイプを得ました:

SignalModule.Implementation.SubscriberType EventSignalChange: EventSignalChange Polling: Polling *Type.GetType(SignalModule.Implementation.SubscriberType)

エラーが発生しました:

'SignalModule.Implementation.SubscriberType' is a 'type'

指定されたコンテキストでは無効です

Type.GetType("SignalModule.Implementation.SubscriberType")

ヌルになりました

問題は何ですか?

4

3 に答える 3

4

フルネームを使用する必要があります。たとえば、私が作成した場合:

public class CarParts
{
  public string PartId { get; set; }
  public int PartCost { get; set; }


  public DataGridViewButtonCell Edit { get; set; }
}

「WindowsFormsApplication5」という名前のdllで

そして、私はそれが私がする必要があるタイプであることを望みます:

Type.GetType("WindowsFormsApplication5.CarParts, WindowsFormsApplication5, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")

タイプを取得する

完全な名前を知る最も簡単な方法は、必要なクラスのインスタンスGetTypeを取得し、Typeクラス インスタンスを取得して取得することです。AssemblyQualifiedName物件の見方

于 2013-08-20T06:32:41.723 に答える
2

問題のタイプはパブリックでスコープ内にあるように見えるので、単純に使用しないでください:

typeof(SignalModule.Implementation.SubscriberType)

代わりは?適切なusingディレクティブを使用すると、 typeof(SubscriberType).

静的メソッドの問題は、型が特定の assembly に含まれていない限り、型GetType(string)の面倒なアセンブリ修飾名を指定する必要があることです。詳細については、そのメソッドのドキュメント ページを参照してください。mscorlib

型がスコープ内にない場合 (たとえば、現在のアセンブリからのものではなく、公開されていないため)、またはアセンブリを参照できない場合は、 を使用する必要がありますGetType(string)

于 2013-08-20T06:43:27.233 に答える
2

Jeppe Stig Nielsen が書いたことを詳しく説明すると、本当に名前で型を取得する必要がある場合は、別の方法があります。

Type type = typeof(SomeTypeInTheSameAssemblyAsYourType).Assembly
               .GetType("SignalModule.Implementation.SubscriberType")

選択したAssembly.GetType(string)タイプで明確に検索しAssemblyます。

于 2013-08-20T07:00:46.820 に答える