typeof:如何从字符串中获取类型

Ref*_*ael 27 .net c#

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

string stringObjectType = "DateTime";
Run Code Online (Sandbox Code Playgroud)

在跑步的时候,我自己没有任何物体.
所以我无法测试它typeof (object)

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

typeof (stringObjectType)
Run Code Online (Sandbox Code Playgroud)

Har*_*uck 35

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);
}
Run Code Online (Sandbox Code Playgroud)

在MSDN上查看Type.GetType(string)

  • 此外,这只是从MSDN复制/粘贴,没有任何解释或指示源 (5认同)
  • 虽然这段代码是正确的.它回答了他的问题吗?string stringObjectType ="DateTime"; 这里不会得到正确的类型. (2认同)
  • 不管实际代码有多正确。它仍然无法使用 OP 提供的信息。 (2认同)

Pho*_*cUK 23

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

Type DateType = Type.GetType("System.DateTime");
Run Code Online (Sandbox Code Playgroud)

你不能只使用"DateTime",因为那不是类型的名称.如果你这样做并且名称错误(它不存在)那么它将抛出异常.所以你需要一个尝试/捕捉这个.

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

string TypeName = SomeObject.GetType().FullName;
Run Code Online (Sandbox Code Playgroud)

如果你需要使用模糊或不完整的名字,那么你将有一个有趣的时间搞乱反思.并非不可能,但肯定是一种痛苦.