Type.MakeArrayType Metod

Definition

Returnerar ett Type objekt som representerar en matris av den aktuella typen.

Överlagringar

Name Description
MakeArrayType()

Returnerar ett Type objekt som representerar en endimensionell matris av den aktuella typen, med en lägre gräns på noll.

MakeArrayType(Int32)

Returnerar ett Type objekt som representerar en matris av den aktuella typen, med det angivna antalet dimensioner.

Exempel

I följande kodexempel skapas matris, ref (ByRef i Visual Basic) och pekartyper för klassen Test.

using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        // Create a Type object that represents a one-dimensional
        // array of Example objects.
        Type t = typeof(Example).MakeArrayType();
        Console.WriteLine("\r\nArray of Example: {0}", t);

        // Create a Type object that represents a two-dimensional
        // array of Example objects.
        t = typeof(Example).MakeArrayType(2);
        Console.WriteLine("\r\nTwo-dimensional array of Example: {0}", t);

        // Demonstrate an exception when an invalid array rank is
        // specified.
        try
        {
            t = typeof(Example).MakeArrayType(-1);
        }
        catch(Exception ex)
        {
            Console.WriteLine("\r\n{0}", ex);
        }

        // Create a Type object that represents a ByRef parameter
        // of type Example.
        t = typeof(Example).MakeByRefType();
        Console.WriteLine("\r\nByRef Example: {0}", t);

        // Get a Type object representing the Example class, a
        // MethodInfo representing the "Test" method, a ParameterInfo
        // representing the parameter of type Example, and finally
        // a Type object representing the type of this ByRef parameter.
        // Compare this Type object with the Type object created using
        // MakeByRefType.
        Type t2 = typeof(Example);
        MethodInfo mi = t2.GetMethod("Test");
        ParameterInfo pi = mi.GetParameters()[0];
        Type pt = pi.ParameterType;
        Console.WriteLine("Are the ByRef types equal? {0}", (t == pt));

        // Create a Type object that represents a pointer to an
        // Example object.
        t = typeof(Example).MakePointerType();
        Console.WriteLine("\r\nPointer to Example: {0}", t);
    }

    // A sample method with a ByRef parameter.
    //
    public void Test(ref Example e)
    {
    }
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */
type Example() =
    // A sample method with a ByRef parameter.
    member _.Test(e: Example byref) = ()

do
    // Create a Type object that represents a one-dimensional
    // array of Example objects.
    let t = typeof<Example>.MakeArrayType()
    printfn $"\r\nArray of Example: {t}"

    // Create a Type object that represents a two-dimensional
    // array of Example objects.
    let t = typeof<Example>.MakeArrayType 2
    printfn $"\r\nTwo-dimensional array of Example: {t}"

    // Demonstrate an exception when an invalid array rank is
    // specified.
    try
        let t = typeof<Example>.MakeArrayType -1
        ()
    with ex ->
        printfn $"\r\n{ex}"

    // Create a Type object that represents a ByRef parameter
    // of type Example.
    let t = typeof<Example>.MakeByRefType()
    printfn $"\r\nByRef Example: {t}"

    // Get a Type object representing the Example class, a
    // MethodInfo representing the "Test" method, a ParameterInfo
    // representing the parameter of type Example, and finally
    // a Type object representing the type of this ByRef parameter.
    // Compare this Type object with the Type object created using
    // MakeByRefType.
    let t2 = typeof<Example>
    let mi = t2.GetMethod "Test"
    let pi = mi.GetParameters()[0]
    let pt = pi.ParameterType
    printfn $"Are the ByRef types equal? {t = pt}"

    // Create a Type object that represents a pointer to an
    // Example object.
    let t = typeof<Example>.MakePointerType()
    printfn $"\r\nPointer to Example: {t}"

(* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*
 *)
Imports System.Reflection

Public Class Example
    Public Shared Sub Main()
        ' Create a Type object that represents a one-dimensional
        ' array of Example objects.
        Dim t As Type = GetType(Example).MakeArrayType()
        Console.WriteLine(vbCrLf & "Array of Example: " & t.ToString())

        ' Create a Type object that represents a two-dimensional
        ' array of Example objects.
        t = GetType(Example).MakeArrayType(2)
        Console.WriteLine(vbCrLf & "Two-dimensional array of Example: " & t.ToString())

        ' Demonstrate an exception when an invalid array rank is
        ' specified.
        Try
            t = GetType(Example).MakeArrayType(-1)
        Catch ex As Exception
            Console.WriteLine(vbCrLf & ex.ToString())
        End Try

        ' Create a Type object that represents a ByRef parameter
        ' of type Example.
        t = GetType(Example).MakeByRefType()
        Console.WriteLine(vbCrLf & "ByRef Example: " & t.ToString())

        ' Get a Type object representing the Example class, a
        ' MethodInfo representing the "Test" method, a ParameterInfo
        ' representing the parameter of type Example, and finally
        ' a Type object representing the type of this ByRef parameter.
        ' Compare this Type object with the Type object created using
        ' MakeByRefType.
        Dim t2 As Type = GetType(Example)
        Dim mi As MethodInfo = t2.GetMethod("Test")
        Dim pi As ParameterInfo = mi.GetParameters()(0)
        Dim pt As Type = pi.ParameterType
        Console.WriteLine("Are the ByRef types equal? " & (t Is pt))

        ' Create a Type object that represents a pointer to an
        ' Example object.
        t = GetType(Example).MakePointerType()
        Console.WriteLine(vbCrLf & "Pointer to Example: " & t.ToString())
    End Sub

    ' A sample method with a ByRef parameter.
    '
    Public Sub Test(ByRef e As Example)
    End Sub
End Class

' This example produces output similar to the following:
'
'Array of Example: Example[]
'
'Two-dimensional array of Example: Example[,]
'
'System.IndexOutOfRangeException: Index was outside the bounds of the array.
'   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
'   at Example.Main()
'
'ByRef Example: Example&
'Are the ByRef types equal? True
'
'Pointer to Example: Example*

MakeArrayType()

Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs

Returnerar ett Type objekt som representerar en endimensionell matris av den aktuella typen, med en lägre gräns på noll.

public:
 abstract Type ^ MakeArrayType();
public:
 virtual Type ^ MakeArrayType();
public abstract Type MakeArrayType();
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The code for an array of the specified type might not be available.")]
public virtual Type MakeArrayType();
public virtual Type MakeArrayType();
abstract member MakeArrayType : unit -> Type
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The code for an array of the specified type might not be available.")>]
abstract member MakeArrayType : unit -> Type
override this.MakeArrayType : unit -> Type
abstract member MakeArrayType : unit -> Type
override this.MakeArrayType : unit -> Type
Public MustOverride Function MakeArrayType () As Type
Public Overridable Function MakeArrayType () As Type

Returer

Ett Type objekt som representerar en endimensionell matris av den aktuella typen, med en lägre gräns på noll.

Attribut

Undantag

Den anropade metoden stöds inte i basklassen. Härledda klasser måste tillhandahålla en implementering.

Den aktuella typen är TypedReference.

-eller-

Den aktuella typen är en ByRef typ. Det vill: IsByRef returnerar true.

Kommentarer

Metoden MakeArrayType ger ett sätt att generera matristyper vars elementtyper beräknas vid körning.

Observera Den vanliga språkkörningen skiljer mellan vektorer (dvs. endimensionella matriser som alltid är nollbaserade) och flerdimensionella matriser. En vektor, som alltid bara har en dimension, är inte samma som en flerdimensionell matris som råkar ha bara en dimension. Den här metodens överlagring kan bara användas för att skapa vektortyper, och det är det enda sättet att skapa en vektortyp. Använd metodöverlagringen MakeArrayType(Int32) för att skapa flerdimensionella matristyper.

Se även

Gäller för

MakeArrayType(Int32)

Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs
Källa:
Type.cs

Returnerar ett Type objekt som representerar en matris av den aktuella typen, med det angivna antalet dimensioner.

public:
 abstract Type ^ MakeArrayType(int rank);
public:
 virtual Type ^ MakeArrayType(int rank);
public abstract Type MakeArrayType(int rank);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The code for an array of the specified type might not be available.")]
public virtual Type MakeArrayType(int rank);
public virtual Type MakeArrayType(int rank);
abstract member MakeArrayType : int -> Type
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The code for an array of the specified type might not be available.")>]
abstract member MakeArrayType : int -> Type
override this.MakeArrayType : int -> Type
abstract member MakeArrayType : int -> Type
override this.MakeArrayType : int -> Type
Public MustOverride Function MakeArrayType (rank As Integer) As Type
Public Overridable Function MakeArrayType (rank As Integer) As Type

Parametrar

rank
Int32

Antalet dimensioner för matrisen. Det här talet måste vara mindre än eller lika med 32.

Returer

Ett objekt som representerar en matris av den aktuella typen, med det angivna antalet dimensioner.

Attribut

Undantag

rank är ogiltigt. Till exempel 0 eller negativt.

Den anropade metoden stöds inte i basklassen.

Den aktuella typen är TypedReference.

-eller-

Den aktuella typen är en ByRef typ. Det vill: IsByRef returnerar true.

-eller-

rank är större än 32.

Kommentarer

Metoden MakeArrayType ger ett sätt att generera matristyper vars elementtyper beräknas vid körning.

Note

Den vanliga språkkörningen skiljer mellan vektorer (dvs. endimensionella matriser som alltid är nollbaserade) och flerdimensionella matriser. En vektor, som alltid bara har en dimension, är inte samma som en flerdimensionell matris som råkar ha bara en dimension. Du kan inte använda den här metodens överlagring för att skapa en vektortyp. om rank är 1 returnerar den här metoden en flerdimensionell matristyp som råkar ha en dimension. Använd metodöverlagringen MakeArrayType() för att skapa vektortyper.

Se även

Gäller för