Type.HasElementType Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
public:
property bool HasElementType { bool get(); };
public bool HasElementType { get; }
member this.HasElementType : bool
Public ReadOnly Property HasElementType As Boolean
Valor de Propriedade
true se o Type for um array, um ponteiro, ou for passado por referência; caso contrário, false.
Implementações
Exemplos
O exemplo seguinte retorna true ou false dependendo se o objeto é um array, um tipo de referência ou um apontador.
// This code must be compiled with the /unsafe switch:
// csc /unsafe source.cs
using System;
using System.Reflection;
public class Example
{
// This method is for demonstration purposes.
unsafe public void Test(ref int x, out int y, int* z)
{
*z = x = y = 0;
}
public static void Main()
{
// All of the following display 'True'.
// Define an array, get its type, and display HasElementType.
int[] nums = {1, 1, 2, 3, 5, 8, 13};
Type t = nums.GetType();
Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType);
// Test an array type without defining an array.
t = typeof(Example[]);
Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType);
// When you use Reflection Emit to emit dynamic methods and
// assemblies, you can create array types using MakeArrayType.
// The following creates the type 'array of Example'.
t = typeof(Example).MakeArrayType();
Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType);
// When you reflect over methods, HasElementType is true for
// ref, out, and pointer parameter types. The following
// gets the Test method, defined above, and examines its
// parameters.
MethodInfo mi = typeof(Example).GetMethod("Test");
ParameterInfo[] parms = mi.GetParameters();
t = parms[0].ParameterType;
Console.WriteLine("HasElementType is '{0}' for ref parameter types.", t.HasElementType);
t = parms[1].ParameterType;
Console.WriteLine("HasElementType is '{0}' for out parameter types.", t.HasElementType);
t = parms[2].ParameterType;
Console.WriteLine("HasElementType is '{0}' for pointer parameter types.", t.HasElementType);
// When you use Reflection Emit to emit dynamic methods and
// assemblies, you can create pointer and ByRef types to use
// when you define method parameters.
t = typeof(Example).MakePointerType();
Console.WriteLine("HasElementType is '{0}' for pointer types.", t.HasElementType);
t = typeof(Example).MakeByRefType();
Console.WriteLine("HasElementType is '{0}' for ByRef types.", t.HasElementType);
}
}
#nowarn "9"
open FSharp.NativeInterop
type Example() =
// This method is for demonstration purposes.
member _.Test(x: int byref, y: int outref, z: int nativeptr) =
x <- 0
y <- 0
NativePtr.write z 0
// All of the following display 'True'.
do
// Define an array, get its type, and display HasElementType.
let nums = [| 1; 1; 2; 3; 5; 8; 13 |]
let t = nums.GetType()
printfn $"HasElementType is '{t.HasElementType}' for array types."
// Test an array type without defining an array.
let t = typeof<Example[]>
printfn $"HasElementType is '{t.HasElementType}' for array types."
// When you use Reflection Emit to emit dynamic methods and
// assemblies, you can create array types using MakeArrayType.
// The following creates the type 'array of Example'.
let t = typeof<Example>.MakeArrayType()
printfn $"HasElementType is '{t.HasElementType}' for array types."
// When you reflect over methods, HasElementType is true for
// byref, outref, and pointer parameter types. The following
// gets the Test method, defined above, and examines its
// parameters.
let mi = typeof<Example>.GetMethod "Test"
let parms = mi.GetParameters()
let t = parms[0].ParameterType
printfn $"HasElementType is '{t.HasElementType}' for ref parameter types."
let t = parms[1].ParameterType
printfn $"HasElementType is '{t.HasElementType}' for out parameter types."
let t = parms[2].ParameterType
printfn $"HasElementType is '{t.HasElementType}' for pointer parameter types."
// When you use Reflection Emit to emit dynamic methods and
// assemblies, you can create pointer and ByRef types to use
// when you define method parameters.
let t = typeof<Example>.MakePointerType()
printfn $"HasElementType is '{t.HasElementType}' for pointer types."
let t = typeof<Example>.MakeByRefType()
printfn $"HasElementType is '{t.HasElementType}' for ByRef types."
Imports System.Reflection
Imports System.Runtime.InteropServices
Public Class Example
' This method is for demonstration purposes.
Public Shared Sub Test(ByRef x As Integer, <Out> ByRef y As Integer)
End Sub
Public Shared Sub Main()
' All of the following display 'True'.
' Define an array, get its type, and display HasElementType.
Dim nums() As Integer = {1, 1, 2, 3, 5, 8, 13}
Dim t As Type = nums.GetType()
Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType)
' Test an array type without defining an array.
t = GetType(Example())
Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType)
' When you use Reflection Emit to emit dynamic methods and
' assemblies, you can create array types using MakeArrayType.
' The following creates the type 'array of Example'.
t = GetType(Example).MakeArrayType()
Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType)
' When you reflect over methods, HasElementType is true for
' ref, out, and pointer parameter types. The following
' gets the Test method, defined above, and examines its
' parameters.
Dim mi As MethodInfo = GetType(Example).GetMethod("Test")
Dim parms() As ParameterInfo = mi.GetParameters()
t = parms(0).ParameterType
Console.WriteLine("HasElementType is '{0}' for ref parameter types.", t.HasElementType)
t = parms(1).ParameterType
Console.WriteLine("HasElementType is '{0}' for <Out> parameter types.", t.HasElementType)
' When you use Reflection Emit to emit dynamic methods and
' assemblies, you can create pointer and ByRef types to use
' when you define method parameters.
t = GetType(Example).MakePointerType()
Console.WriteLine("HasElementType is '{0}' for pointer types.", t.HasElementType)
t = GetType(Example).MakeByRefType()
Console.WriteLine("HasElementType is '{0}' for ByRef types.", t.HasElementType)
End Sub
End Class
Observações
Por exemplo, Type.GetType("Int32[]"). HasElementType devolve true, mas Type.GetType("Int32"). HasElementType devolve false. HasElementType também retorna true para "Int32*" e "Int32&".
Se a corrente Type representa um tipo genérico, ou um parâmetro de tipo na definição de um tipo genérico ou método genérico, esta propriedade devolve falsesempre .