38

我有很多对象,每个对象都有关于其类型的字符串信息。
像:

string stringObjectType = "DateTime";

跑步时,我自己没有对象。
所以我无法测试它typeof (object)

如何在运行对象类型时通过以下方式获取:

typeof (stringObjectType)
4

2 回答 2

48
try
{
    // Get the type of a specified class.
    Type myType1 = Type.GetType("System.DateTime");
    Console.WriteLine("The full name is {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 {myType2.FullName}.");
}
catch(TypeLoadException e)
{
    Console.WriteLine(e.Message);
}
catch(Exception e)
{
    Console.WriteLine(e.Message);
}

Type.GetType(string)MSDN

于 2013-02-27T09:45:18.693 回答
25

您可以使用Type.GetType()从其字符串名称中获取类型。所以你可以这样做:

Type DateType = Type.GetType("System.DateTime");

您不能只使用“DateTime”,因为这不是类型的名称。如果您这样做并且名称错误(它不存在),那么它将引发异常。所以你需要尝试/解决这个问题。

您可以通过执行以下操作获得任何给定对象的正确类型名称:

string TypeName = SomeObject.GetType().FullName;

如果您需要使用模糊或不完整的名称,那么您将在反思中玩得开心。不是不可能,但肯定很痛苦。

于 2013-02-27T09:58:02.083 回答