(Type) 和 Get.Type() 有什么区别

What's the different between (Type) and Get.Type()

为什么在同一对象上调用它们时两者不同?

protected override Type GetType(MethodInfo methodInfo, object[] arguments)
{
    var typeOne = (Type)arugments.Single();
    Debug.WriteLine(typeOne.ToString()); // This gives me NewWorld.OldWorld.Class

    var typeTwo = arugments.Single().GetType();
    Debug.WriteLine(typeTwo.ToString()); // This gives me System.RuntimeType

    return typeOne;
}

这将真正元...

假设你的 arguments 实际上是一个 Type 的数组,表达式 (Type)arguments.Single() 使单个参数的编译时类型变为 Type.

类型Type表示一个类型。在这种情况下,您得到 NewWorld.OldWorld.Class,这很可能是 class 的完全限定名称。 arguments 中的单个元素(属于 Type 类型)表示类型 NewWord.OldWorld.Class.

第二个表达式 arguments.Single().GetType() 获取调用 GetType 的对象的运行时类型,作为 Type 的实例。在这种情况下,这将 return arguments.Single() 的运行时类型,即 RuntimeTypeType 的子 class。

基本上:

  • (Type)arguments.Single() 告诉编译器 arguments 包含类型为 Type 的单个元素。它的计算结果为 Type 表示 NewWord.OldWord.Class 的对象。

  • arguments.Single().GetType() 获取 argument.Single() 类型 。这与 arguments.Single() 代表的类型 相同。它代表类型Class,但它的类型RuntimeType。如果您仍然感到困惑,这里有一个整数示例。

    int[] array = new int[] { 10 };
    

    array.Single() 代表 数字 10 但它的 类型 System.Int32.