如何通过类名获取类类型?

Posted

技术标签:

【中文标题】如何通过类名获取类类型?【英文标题】:How to get class type by its class name? 【发布时间】:2013-08-20 21:44:45 【问题描述】:
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 我只允许使用这个类名的字符串形式来获取它的类型。

谢谢大家。 我自己就这样解决了这个问题。


      Type t = Type.GetType(string.Concat(viewModel, ",", "Myspace"));

【问题讨论】:

也许这会有所帮助***.com/questions/17045635/… 试试这个方法 string model = "Myspace.MyClass";改用程序集限定名 ***.com/questions/648160/… 【参考方案1】:

只需使用函数 typeof()。参数就是那个类名。

Type type = typeof(FIXProtoClientTest);

MSDN on typeof()

【讨论】:

仅当类型在编译时已知。【参考方案2】:

一般来说,您几乎不需要进行类型比较,除非您使用反射或接口进行操作。尽管如此:

如果您知道要与之比较的类型,请使用 isas 运算符:

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));

【讨论】:

我已经更改了我的问题,以便更清楚。你能再看一遍吗?谢谢【参考方案3】:

如果您使用完全限定的类名(包括其命名空间),您的行 Type.GetType(model) 将起作用。

此外,如果它与进行调用的代码位于不同的程序集中,则当引用的程序集对象是包含该类型的程序集的实例时,您应该使用 Assembly.GetType(typeName)。

【讨论】:

以上是关于如何通过类名获取类类型?的主要内容,如果未能解决你的问题,请参考以下文章

类名.class 类名.this 详解

如何从属性内部获取类名(这又是某种类型的对象)

前端技术之:如何通过类的属性获取类名

java中,如何通过实体类名称获取对应的数据表名称

java如何通过反射获取包中所有的类?

转:java 类名 this 的使用