web-dev-qa-db-ja.com

クラス名でクラスタイプを取得する方法は?

namespace Myspace
{
    public class MyClass
    {
    }
} //This class is in another file.

using Myspace;
static void Main(string[] args)
{
    Regex regexViewModelKey = new Regex(RegularExpr.ViewModelKeyPattern);
    string viewModel = regexViewModelKey.Match(match.Value).Value;
    //Now, vieModel is a string, and its value is "MyClass". So, I only know the class name, this is why I ask this question.

    //Now, I'm only allowed to use the string form of this class name to get its type.
    //I have tyied like this, but its no use.
    Type t = Type.GetType(viewModel);
    //it's return a null.

    //Then I tyied another method like this, but there is an exception when calling Assembly.Load
    Assembly assembly = Assembly.Load("Myspace");
    Type ty = Assembly.GetType("Myspace" + viewModel);
}

私の質問が明確であることを願っています。 THX私はこのクラス名の文字列形式を使用してその型を取得することしか許可されていません。

thxみんな。私はこの質問をこのように自分で解決しました。

{
      Type t = Type.GetType(string.Concat(viewModel, ",", "Myspace"));
}
17
Huan Fu

関数typeof()を使用するだけです。パラメーターはそのクラス名です。

Type type = typeof(FIXProtoClientTest);

typeof()のMSDN

34
Shen liang

一般的に言えば、リフレクションやインターフェイスを使用して何かをしているのでなければ、型比較を行う必要はほとんどありません。それにもかかわらず:

比較するタイプがわかっている場合は、isまたは演算子として使用します。

if( unknownObject is TypeIKnow ) { // run code here

As演算子は、例外ではなく失敗した場合にnullを返すキャストを実行します。

TypeIKnow typed = unknownObject as TypeIKnow;

型がわからず、実行時の型情報だけが必要な場合は、。GetType()メソッドを使用します。

Type typeInformation = unknownObject.GetType();



     // int is a value type
    int i = 0;
    // Prints True for any value of i
    Console.WriteLine(i.GetType() == typeof(int));

    // string is a sealed reference type
    string s = "Foo";
    // Prints True for any value of s
    Console.WriteLine(s == null || s.GetType() == typeof(string));

    // object is an unsealed reference type
    object o = new FileInfo("C:\\f.txt");
    // Prints False, but could be true for some values of o
    Console.WriteLine(o == null || o.GetType() == typeof(object));

 // Get the type of a specified class.
                Type myType1 = Type.GetType("System.Int32");
                Console.WriteLine("The full name is {0}.", myType1.FullName);
                // Since NoneSuch does not exist in this Assembly, GetType throws a TypeLoadException.
                Type myType2 = Type.GetType("NoneSuch", true);
                Console.WriteLine("The full name is {0}.", myType2.FullName);

    // FileSystemInfo is an abstract type
    FileSystemInfo fsi = new DirectoryInfo("C:\\");
    // Prints False for all non-null values of fsi
    Console.WriteLine(fsi == null || fsi.GetType() == typeof(FileSystemInfo));
2
Backtrack

名前空間を含む完全修飾クラス名を使用すると、行Type.GetType(model)が機能します。

さらに、呼び出しを行うコードとは異なるアセンブリ内にある場合、参照されるAssemblyオブジェクトが型を含むアセンブリのインスタンスである場合、Assembly.GetType(typeName)を使用する必要があります。

1
tker