Type.GetType Metod

Definition

Hämtar ett Type objekt som representerar den angivna typen.

Överlagringar

Name Description
GetType()

Hämtar den aktuella Type.

GetType(String)

Type Hämtar med det angivna namnet och utför en skiftlägeskänslig sökning.

GetType(String, Boolean)

Type Hämtar med det angivna namnet, utför en skiftlägeskänslig sökning och anger om ett undantag ska utlösas om typen inte hittas.

GetType(String, Boolean, Boolean)

Type Hämtar med det angivna namnet och anger om ett undantag ska utlösas om typen inte hittas och om en skiftlägeskänslig sökning ska utföras.

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)

Hämtar typen med det angivna namnet, om du vill ange anpassade metoder för att matcha sammansättningen och typen.

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)

Hämtar typen med det angivna namnet, anger om ett undantag ska utlösas om typen inte hittas och om du vill tillhandahålla anpassade metoder för att lösa sammansättningen och typen.

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)

Hämtar typen med det angivna namnet, anger om en skiftlägeskänslig sökning ska utföras och om ett undantag ska utlösas om typen inte hittas och om du vill ange anpassade metoder för att lösa sammansättningen och typen.

GetType()

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

Hämtar den aktuella Type.

public:
 Type ^ GetType();
public:
 virtual Type ^ GetType();
public Type GetType();
override this.GetType : unit -> Type
Public Function GetType () As Type

Returer

Den aktuella Type.

Implementeringar

Undantag

En klassinitierare anropas och utlöser ett undantag.

Se även

Gäller för

GetType(String)

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

Type Hämtar med det angivna namnet och utför en skiftlägeskänslig sökning.

public:
 static Type ^ GetType(System::String ^ typeName);
public static Type GetType(string typeName);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName);
public static Type? GetType(string typeName);
static member GetType : string -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type

Parametrar

typeName
String

Det sammansättningskvalificerade namnet på den typ som ska hämtas. Se även AssemblyQualifiedName. Om typen finns i den pågående sammansättningen eller i mscorlib.dll/System.Private.CoreLib.dllräcker det att ange typnamnet som kvalificerats av dess namnområde.

Returer

Typen med det angivna namnet, om det hittas; annars . null

Attribut

Undantag

typeName är null.

En klassinitierare anropas och utlöser ett undantag.

typeName representerar en allmän typ som har en pekartyp, en ByRef typ eller Void som ett av dess typargument.

-eller-

typeName representerar en allmän typ som har ett felaktigt antal typargument.

-eller-

typeName representerar en allmän typ och ett av dess typargument uppfyller inte begränsningarna för motsvarande typparameter.

typeName representerar en ogiltig typ, till exempel en matris med TypedReference.

Sammansättningen eller något av dess beroenden hittades, men kunde inte läsas in.

Obs! I .NET för Windows Store-appar eller Portable Class Library fångar du i stället basklassfelet IOException.

Sammansättningen är inte giltig för den inlästa körningen.

Exempel

I följande exempel hämtas typen av System.Int32 och använder det typobjektet för att visa FullName egenskapen System.Int32.

using System;

class GetTypeExample
{
     public static void Main()
     {
         try {
             // Get the type of a specified class.
             Type myType1 = Type.GetType("System.Int32");
             Console.WriteLine("The full name is {0}.\n", myType1.FullName);
         }
         catch (TypeLoadException e)
         {
            Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
         }

         try {
             // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Type myType2 = Type.GetType("NoneSuch", true);
             Console.WriteLine("The full name is {0}.", myType2.FullName);
         }
         catch(TypeLoadException e) {
            Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
         }
     }
}
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
open System

try
    // Get the type of a specified class.
    let myType1 = Type.GetType "System.Int32"
    printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type System.Int32"

try
    // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
    let myType2 = Type.GetType("NoneSuch", true)
    printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
Class Example
     Public Shared Sub Main()
         Try
             ' Get the type of the specified class.
             Dim myType1 As Type = Type.GetType("System.Int32")
             Console.WriteLine("The full name is {0}.", myType1.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type System.Int32",
                               e.GetType().Name)
         End Try

         Console.WriteLine()

         Try
             ' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Dim myType2 As Type = Type.GetType("NoneSuch", True)
             Console.WriteLine("The full name is {0}.", myType2.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
         End Try
     End Sub
End Class
' The example displays the following output:
'       The full name is System.Int32.
'
'       TypeLoadException: Unable to load type NoneSuch

Kommentarer

Du kan använda GetType metoden för att hämta ett Type objekt för en typ i en annan sammansättning om du känner till dess sammansättningskvalificerade namn, som kan hämtas från AssemblyQualifiedName. GetType orsakar inläsning av sammansättningen som anges i typeName. Du kan också läsa in en sammansättning med hjälp av Assembly.Load metoden och sedan använda Assembly.GetType metoden eller Assembly.GetTypes för att hämta Type objekt. Om en typ finns i en sammansättning som är känd för ditt program vid kompileringstiden är det mer effektivt att använda typeof i C# eller operatorn GetType i Visual Basic.

Note

Om typeName det inte går att hitta returnerar GetType(String)anropet null till metoden . Det utlöser inget undantag. Om du vill kontrollera om ett undantag utlöses anropar du en överlagring av metoden GetType som har en throwOnError parameter.

endast .NET Framework: GetType fungerar bara på sammansättningar som läses in från disken. Om du anropar GetType för att söka efter en typ som definierats i en dynamisk sammansättning som definierats med hjälp av System.Reflection.Emit tjänsterna kan du få inkonsekvent beteende. Beteendet beror på om den dynamiska sammansättningen är beständig, dvs. skapas med hjälp RunAndSave av uppräkningslägena eller Save åtkomstlägena System.Reflection.Emit.AssemblyBuilderAccess . Om den dynamiska sammansättningen är beständig och har skrivits till disk innan GetType anropas, hittar inläsaren den sparade sammansättningen på disken, läser in sammansättningen och hämtar typen från den sammansättningen. Om sammansättningen inte har sparats på disken när GetType anropas returnerar nullmetoden . GetTypeförstår inte tillfälliga dynamiska sammansättningar. Därför returnerar GetTypeanropande null för att hämta en typ i en tillfällig dynamisk sammansättning .

Om du vill använda GetType på en dynamisk modul i .NET Framework kan du prenumerera på händelsen AppDomain.AssemblyResolve och anropa GetType innan du sparar. Annars får du två kopior av sammansättningen i minnet.

På .NET Core 3.0 och senare versioner påverkas sammansättningsbelastningar som utlöses av det här API:et av det aktuella värdet för AssemblyLoadContext.CurrentContextualReflectionContext.

I följande tabell visas vilka medlemmar i en basklass som returneras av metoderna när de Get reflekterar över en typ.

Medlemstyp Static Icke-statisk
Constructor No No
Fält No Yes. Ett fält är alltid dolt genom namn och signatur (hide-by-name-and-signature).
Händelse Ej tillämpligt Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan.
Metod No Yes. En metod (både virtuell och icke-virtuell) kan vara hide-by-name eller hide-by-name-and-signature.
Kapslad typ No No
Fastighet Ej tillämpligt Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan.
  1. Dölj efter namn och signatur tar hänsyn till alla delar av signaturen, inklusive anpassade modifierare, returtyper, parametertyper, sentinels och ohanterade anropskonventioner. Det här är en binär jämförelse.

  2. För reflektion är egenskaper och händelser dolda genom namn och signatur. Om du har en egenskap med både en get- och en set-accessor i basklassen, men den härledda klassen bara har en get-accessor, döljer egenskapen i den härledda klassen basklassegenskapen och du kommer inte att kunna komma åt set-accessorn i basklassen.

  3. Anpassade attribut ingår inte i det vanliga typsystemet.

Matriser eller COM-typer söks inte efter om de inte redan har lästs in i tabellen med tillgängliga klasser.

typeName kan vara typnamnet som kvalificerats av dess namnområde eller ett sammansättningskvalificerat namn som innehåller en specifikation för sammansättningsnamn. Se även AssemblyQualifiedName.

Om typeName innehåller namnområdet men inte sammansättningsnamnet söker den här metoden bara efter det anropande objektets sammansättning och mscorlib.dll/System.Private.CoreLib.dll, i den ordningen. Om typeName är fullständigt kvalificerat med det partiella eller fullständiga sammansättningsnamnet söker den här metoden i den angivna sammansättningen. Om sammansättningen har ett starkt namn krävs ett fullständigt sammansättningsnamn.

Egenskapen AssemblyQualifiedName returnerar ett fullständigt kvalificerat typnamn, inklusive kapslade typer, sammansättningsnamnet och argument av allmän typ. Alla kompilatorer som stöder common language runtime genererar det enkla namnet på en kapslad klass, och reflektion konstruerar ett manglat namn när de efterfrågas, i enlighet med följande konventioner.

Note

Processorarkitektur är en del av sammansättningsidentiteten och kan anges som en del av sammansättningsnamnsträngar. Till exempel "ProcessorArchitecture=msil". Den ingår dock inte i strängen som returneras av AssemblyQualifiedName egenskapen av kompatibilitetsskäl. Du kan också läsa in typer genom att skapa ett AssemblyName objekt och skicka det till en lämplig överlagring av Load metoden. Du kan sedan använda Assembly.GetType metoden för att läsa in typer från sammansättningen. Se även AssemblyName.ProcessorArchitecture.

Avgränsare Innebörd
Omvänt snedstreck (\) Escape-tecken.
Backtick (') Föregår en eller flera siffror som representerar antalet typparametrar som finns i slutet av namnet på en allmän typ.
Hakparenteser ([]) Omsluta en argumentlista av allmän typ för en konstruerad generisk typ. i en typargumentlista omger du en sammansättningskvalificerad typ.
Kommatecken (,) Föregår sammansättningsnamnet.
Period (.) Anger namnområdesidentifierare.
Plustecken (+) Föregår en kapslad klass.

Till exempel kan det fullständigt kvalificerade namnet för en klass se ut så här:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Om namnområdet var TopNamespace.Sub+Namespace måste strängen föregå plustecknet (+) med ett escape-tecken (\) för att förhindra att det tolkas som en kapslingsavgränsare. Reflektion genererar den här strängen på följande sätt:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

En "++" blir "\+\+" och "\" blir "\\".

Det här kvalificerade namnet kan sparas och senare användas för att läsa in Type. Om du vill söka efter och läsa in en Typeanvänder du GetType antingen endast typnamnet eller med namnet på den kvalificerade sammansättningstypen. GetType med typnamnet söker bara efter Type i anroparens sammansättning och sedan i systemsammansättningen. GetType med namnet på den kvalificerade sammansättningstypen letar Type efter i valfri sammansättning.

Typnamn kan innehålla avslutande tecken som anger ytterligare information om typen, till exempel om typen är en referenstyp, en pekartyp eller en matristyp. Om du vill hämta typnamnet utan dessa avslutande tecken använder du t.GetElementType().ToString(), där t är typen.

Blanksteg är relevanta för alla typnamnskomponenter förutom sammansättningsnamnet. I sammansättningsnamnet är blanksteg före avgränsaren relevanta, men blanksteg efter avgränsaren ignoreras.

Namnet på en allmän typ slutar med en backtick (') följt av siffror som representerar antalet argument av allmän typ. Syftet med det här namnet är att tillåta kompilatorer att stödja generiska typer med samma namn men med olika antal typparametrar, som förekommer i samma omfång. Reflektion returnerar till exempel de manglade namnen Tuple`1 och Tuple`2 från de generiska metoderna Tuple(Of T) och Tuple(Of T0, T1) i Visual Basic, eller Tuple<T> och Tuple<T0, T1> i Visual C#.

För generiska typer omges typargumentlistan inom hakparenteser och typargumenten avgränsas med kommatecken. En allmän Dictionary<TKey,TValue> har till exempel två typparametrar. En Dictionary<TKey,TValue> av MyType med nycklar av typen String kan representeras på följande sätt:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Om du vill ange en sammansättningskvalificerad typ i en typargumentlista omger du den sammansättningskvalificerade typen inom hakparenteser. Annars tolkas kommatecken som avgränsar delarna av det sammansättningskvalificerade namnet som avgränsa ytterligare typargument. Till exempel kan en Dictionary<TKey,TValue> av MyType fromMyAssembly.dll, med nycklar av typen String, anges på följande sätt:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Note

En sammansättningskvalificerad typ kan endast omges av hakparenteser när den visas i en typparameterlista. Reglerna för att söka efter kvalificerade och okvalificerade typer i typparameterlistor är desamma som reglerna för kvalificerade och okvalificerade icke-generiska typer.

Nullbara typer är ett specialfall av generiska typer. Till exempel representeras en nullbar Int32 av strängen "System.Nullable'1[System.Int32]".

Note

Du kan också få null-typer med hjälp av typoperatorer. Till exempel returneras typen nullable Boolean av typeof(Nullable<bool>) i C# och av GetType(Nullable(Of Boolean)) i Visual Basic.

I följande tabell visas den syntax som du använder för GetType olika typer.

Hämta Använd
En nullbar Int32 Type.GetType("System.Nullable`1[System.Int32]")
En ohanterad pekare till MyType Type.GetType("MyType*")
En ohanterad pekare till en pekare till MyType Type.GetType("MyType**")
En hanterad pekare eller referens till MyType Type.GetType("MyType&"). Observera att till skillnad från pekare är referenser begränsade till en nivå.
En överordnad klass och en kapslad klass Type.GetType("MyParentClass+MyNestedClass")
En endimensionell matris med en lägre gräns på 0 Type.GetType("MyType[]")
En endimensionell matris med en okänd nedre gräns Type.GetType("MyType[*]")
En n-dimensionell matris Ett kommatecken (,) inom hakparenteserna totalt n-1 gånger. Representerar till exempel System.Object[,,] en tredimensionell Object matris.
En matris med endimensionella matriser Type.GetType("MyType[][]")
En rektangulär tvådimensionell matris med okända nedre gränser Type.GetType("MyType[,]")
En allmän typ med ett typargument Type.GetType("MyGenericType`1[MyType]")
En allmän typ med två typargument Type.GetType("MyGenericType`2[MyType,AnotherType]")
En allmän typ med två sammansättningskvalificerade typargument Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
En sammansättningskvalificerad allmän typ med ett argument av typen sammansättningskvalificerad typ Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
En allmän typ vars typargument är en allmän typ med två typargument Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

Se även

Gäller för

GetType(String, Boolean)

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

Type Hämtar med det angivna namnet, utför en skiftlägeskänslig sökning och anger om ett undantag ska utlösas om typen inte hittas.

public:
 static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType(string typeName, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError);
public static Type? GetType(string typeName, bool throwOnError);
static member GetType : string * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type

Parametrar

typeName
String

Det sammansättningskvalificerade namnet på den typ som ska hämtas. Se även AssemblyQualifiedName. Om typen finns i den pågående sammansättningen eller i mscorlib.dll/System.Private.CoreLib.dllräcker det att ange typnamnet som kvalificerats av dess namnområde.

throwOnError
Boolean

true för att utlösa ett undantag om typen inte kan hittas. false för att returnera null. Om du false anger utelämnas även vissa andra undantagsvillkor, men inte alla. Se avsnittet Undantag.

Returer

Typen med det angivna namnet. Om typen inte hittas anger parametern throwOnError om null returneras eller om ett undantag genereras. I vissa fall genereras ett undantag oavsett värdet throwOnErrorför . Se avsnittet Undantag.

Attribut

Undantag

typeName är null.

En klassinitierare anropas och utlöser ett undantag.

throwOnError är true och typen hittades inte.

-eller-

throwOnError är true och typeName innehåller ogiltiga tecken, till exempel en inbäddad flik.

-eller-

throwOnError är true och typeName är en tom sträng.

-eller-

throwOnError är true och typeName representerar en matristyp med en ogiltig storlek.

-eller-

typeName representerar en matris med TypedReference.

throwOnError är true och typeName innehåller ogiltig syntax. Till exempel "MyType[,*,]".

-eller-

typeName representerar en allmän typ som har en pekartyp, en ByRef typ eller Void som ett av dess typargument.

-eller-

typeName representerar en allmän typ som har ett felaktigt antal typargument.

-eller-

typeName representerar en allmän typ och ett av dess typargument uppfyller inte begränsningarna för motsvarande typparameter.

throwOnError är true och sammansättningen eller något av dess beroenden hittades inte.

Sammansättningen eller något av dess beroenden hittades, men kunde inte läsas in.

Obs! I .NET för Windows Store-appar eller Portable Class Library fångar du i stället basklassfelet IOException.

Sammansättningen eller något av dess beroenden är inte giltigt för den inlästa körningen.

Exempel

I följande exempel hämtas typen av System.Int32 och använder det typobjektet för att visa FullName egenskapen System.Int32. Om ett typobjekt refererar till en sammansättning som inte finns utlöser det här exemplet ett undantag.

using System;

class GetTypeExample
{
     public static void Main()
     {
         try {
             // Get the type of a specified class.
             Type myType1 = Type.GetType("System.Int32");
             Console.WriteLine("The full name is {0}.\n", myType1.FullName);
         }
         catch (TypeLoadException e)
         {
            Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
         }

         try {
             // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Type myType2 = Type.GetType("NoneSuch", true);
             Console.WriteLine("The full name is {0}.", myType2.FullName);
         }
         catch(TypeLoadException e) {
            Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
         }
     }
}
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
open System

try
    // Get the type of a specified class.
    let myType1 = Type.GetType "System.Int32"
    printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type System.Int32"

try
    // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
    let myType2 = Type.GetType("NoneSuch", true)
    printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
Class Example
     Public Shared Sub Main()
         Try
             ' Get the type of the specified class.
             Dim myType1 As Type = Type.GetType("System.Int32")
             Console.WriteLine("The full name is {0}.", myType1.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type System.Int32",
                               e.GetType().Name)
         End Try

         Console.WriteLine()

         Try
             ' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Dim myType2 As Type = Type.GetType("NoneSuch", True)
             Console.WriteLine("The full name is {0}.", myType2.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
         End Try
     End Sub
End Class
' The example displays the following output:
'       The full name is System.Int32.
'
'       TypeLoadException: Unable to load type NoneSuch

Kommentarer

Du kan använda GetType metoden för att hämta ett Type objekt för en typ i en annan sammansättning om du känner till dess sammansättningskvalificerade namn, som kan hämtas från AssemblyQualifiedName. GetType orsakar inläsning av sammansättningen som anges i typeName. Du kan också läsa in en sammansättning med hjälp av Assembly.Load metoden och sedan använda Assembly.GetType metoden eller Assembly.GetTypes för att hämta Type objekt. Om en typ finns i en sammansättning som är känd för ditt program vid kompileringstiden är det mer effektivt att använda typeof i C# eller operatorn GetType i Visual Basic.

endast .NET Framework: GetType fungerar bara på sammansättningar som läses in från disken. Om du anropar GetType för att söka efter en typ som definierats i en dynamisk sammansättning som definierats med hjälp av System.Reflection.Emit tjänsterna kan du få inkonsekvent beteende. Beteendet beror på om den dynamiska sammansättningen är beständig, dvs. skapas med hjälp RunAndSave av uppräkningslägena eller Save åtkomstlägena System.Reflection.Emit.AssemblyBuilderAccess . Om den dynamiska sammansättningen är beständig och har skrivits till disk innan GetType anropas, hittar inläsaren den sparade sammansättningen på disken, läser in sammansättningen och hämtar typen från den sammansättningen. Om sammansättningen inte har sparats på disken när GetType anropas returnerar nullmetoden . GetTypeförstår inte tillfälliga dynamiska sammansättningar. Därför returnerar GetTypeanropande null för att hämta en typ i en tillfällig dynamisk sammansättning .

Om du vill använda GetType på en dynamisk modul i .NET Framework kan du prenumerera på händelsen AppDomain.AssemblyResolve och anropa GetType innan du sparar. Annars får du två kopior av sammansättningen i minnet.

På .NET Core 3.0 och senare versioner påverkas sammansättningsbelastningar som utlöses av det här API:et av det aktuella värdet för AssemblyLoadContext.CurrentContextualReflectionContext.

Parametern throwOnError anger vad som händer när typen inte hittas och undertrycker även vissa andra undantagsvillkor enligt beskrivningen i avsnittet Undantag. Vissa undantag utlöses oavsett värdet throwOnErrorför . Om typen till exempel hittas men inte kan läsas in genereras en TypeLoadException även om throwOnError är false.

I följande tabell visas vilka medlemmar i en basklass som returneras av metoderna när de Get reflekterar över en typ.

Medlemstyp Static Icke-statisk
Constructor No No
Fält No Yes. Ett fält är alltid dolt genom namn och signatur (hide-by-name-and-signature).
Händelse Ej tillämpligt Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan.
Metod No Yes. En metod (både virtuell och icke-virtuell) kan vara hide-by-name eller hide-by-name-and-signature.
Kapslad typ No No
Fastighet Ej tillämpligt Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan.
  1. Dölj efter namn och signatur tar hänsyn till alla delar av signaturen, inklusive anpassade modifierare, returtyper, parametertyper, sentinels och ohanterade anropskonventioner. Det här är en binär jämförelse.

  2. För reflektion är egenskaper och händelser dolda genom namn och signatur. Om du har en egenskap med både en get- och en set-accessor i basklassen, men den härledda klassen bara har en get-accessor, döljer egenskapen i den härledda klassen basklassegenskapen och du kommer inte att kunna komma åt set-accessorn i basklassen.

  3. Anpassade attribut ingår inte i det vanliga typsystemet.

Matriser eller COM-typer söks inte efter om de inte redan har lästs in i tabellen med tillgängliga klasser.

typeName kan vara typnamnet som kvalificerats av dess namnområde eller ett sammansättningskvalificerat namn som innehåller en specifikation för sammansättningsnamn. Se även AssemblyQualifiedName.

Om typeName innehåller namnområdet men inte sammansättningsnamnet söker den här metoden bara efter det anropande objektets sammansättning och mscorlib.dll/System.Private.CoreLib.dll, i den ordningen. Om typeName är fullständigt kvalificerat med det partiella eller fullständiga sammansättningsnamnet söker den här metoden i den angivna sammansättningen. Om sammansättningen har ett starkt namn krävs ett fullständigt sammansättningsnamn.

Egenskapen AssemblyQualifiedName returnerar ett fullständigt kvalificerat typnamn, inklusive kapslade typer, sammansättningsnamnet och allmänna argument. Alla kompilatorer som stöder common language runtime genererar det enkla namnet på en kapslad klass, och reflektion konstruerar ett manglat namn när de efterfrågas, i enlighet med följande konventioner.

Note

Processorarkitektur är en del av sammansättningsidentiteten och kan anges som en del av sammansättningsnamnsträngar. Till exempel "ProcessorArchitecture=msil". Den ingår dock inte i strängen som returneras av AssemblyQualifiedName egenskapen av kompatibilitetsskäl. Du kan också läsa in typer genom att skapa ett AssemblyName objekt och skicka det till en lämplig överlagring av Load metoden. Du kan sedan använda Assembly.GetType metoden för att läsa in typer från sammansättningen. Se även AssemblyName.ProcessorArchitecture.

Avgränsare Innebörd
Omvänt snedstreck (\) Escape-tecken.
Backtick (') Föregår en eller flera siffror som representerar antalet typparametrar som finns i slutet av namnet på en allmän typ.
Hakparenteser ([]) Omsluta en argumentlista av allmän typ för en konstruerad generisk typ. i en typargumentlista omger du en sammansättningskvalificerad typ.
Kommatecken (,) Föregår sammansättningsnamnet.
Period (.) Anger namnområdesidentifierare.
Plustecken (+) Föregår en kapslad klass.

Till exempel kan det fullständigt kvalificerade namnet för en klass se ut så här:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Om namnområdet var TopNamespace.Sub+Namespace måste strängen föregå plustecknet (+) med ett escape-tecken (\) för att förhindra att det tolkas som en kapslingsavgränsare. Reflektion genererar den här strängen på följande sätt:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

En "++" blir "\+\+" och "\" blir "\\".

Det här kvalificerade namnet kan sparas och senare användas för att läsa in Type. Om du vill söka efter och läsa in en Typeanvänder du GetType antingen endast typnamnet eller med namnet på den kvalificerade sammansättningstypen. GetType med typnamnet söker bara efter Type i anroparens sammansättning och sedan i systemsammansättningen. GetType med namnet på den kvalificerade sammansättningstypen letar Type efter i valfri sammansättning.

Typnamn kan innehålla avslutande tecken som anger ytterligare information om typen, till exempel om typen är en referenstyp, en pekartyp eller en matristyp. Om du vill hämta typnamnet utan dessa avslutande tecken använder du t.GetElementType().ToString(), där t är typen.

Blanksteg är relevanta för alla typnamnskomponenter förutom sammansättningsnamnet. I sammansättningsnamnet är blanksteg före avgränsaren relevanta, men blanksteg efter avgränsaren ignoreras.

Namnet på en allmän typ slutar med en backtick (') följt av siffror som representerar antalet argument av allmän typ. Syftet med det här namnet är att tillåta kompilatorer att stödja generiska typer med samma namn men med olika antal typparametrar, som förekommer i samma omfång. Reflektion returnerar till exempel de manglade namnen Tuple`1 och Tuple`2 från de generiska metoderna Tuple(Of T) och Tuple(Of T0, T1) i Visual Basic, eller Tuple<T> och Tuple<T0, T1> i Visual C#.

För generiska typer omges typargumentlistan inom hakparenteser och typargumenten avgränsas med kommatecken. En allmän Dictionary<TKey,TValue> har till exempel två typparametrar. En Dictionary<TKey,TValue> av MyType med nycklar av typen String kan representeras på följande sätt:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Om du vill ange en sammansättningskvalificerad typ i en typargumentlista omger du den sammansättningskvalificerade typen inom hakparenteser. Annars tolkas kommatecken som avgränsar delarna av det sammansättningskvalificerade namnet som avgränsa ytterligare typargument. Till exempel kan en Dictionary<TKey,TValue> av MyType från MyAssembly.dll, med nycklar av typen String, anges på följande sätt:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Note

En sammansättningskvalificerad typ kan endast omges av hakparenteser när den visas i en typparameterlista. Reglerna för att söka efter kvalificerade och okvalificerade typer i typparameterlistor är desamma som reglerna för kvalificerade och okvalificerade icke-generiska typer.

Nullbara typer är ett specialfall av generiska typer. Till exempel representeras en nullbar Int32 av strängen "System.Nullable'1[System.Int32]".

Note

Du kan också få null-typer med hjälp av typoperatorer. Till exempel returneras typen nullable Boolean av typeof(Nullable<bool>) i C# och av GetType(Nullable(Of Boolean)) i Visual Basic.

I följande tabell visas den syntax som du använder för GetType olika typer.

Hämta Använd
En nullbar Int32 Type.GetType("System.Nullable`1[System.Int32]")
En ohanterad pekare till MyType Type.GetType("MyType*")
En ohanterad pekare till en pekare till MyType Type.GetType("MyType**")
En hanterad pekare eller referens till MyType Type.GetType("MyType&"). Observera att till skillnad från pekare är referenser begränsade till en nivå.
En överordnad klass och en kapslad klass Type.GetType("MyParentClass+MyNestedClass")
En endimensionell matris med en lägre gräns på 0 Type.GetType("MyArray[]")
En endimensionell matris med en okänd nedre gräns Type.GetType("MyArray[*]")
En n-dimensionell matris Ett kommatecken (,) inom hakparenteserna totalt n-1 gånger. Representerar till exempel System.Object[,,] en tredimensionell Object matris.
En tvådimensionell matriss matris Type.GetType("MyArray[][]")
En rektangulär tvådimensionell matris med okända nedre gränser Type.GetType("MyArray[,]")
En allmän typ med ett typargument Type.GetType("MyGenericType`1[MyType]")
En allmän typ med två typargument Type.GetType("MyGenericType`2[MyType,AnotherType]")
En allmän typ med två sammansättningskvalificerade typargument Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
En sammansättningskvalificerad allmän typ med ett argument av typen sammansättningskvalificerad typ Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
En allmän typ vars typargument är en allmän typ med två typargument Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

Se även

Gäller för

GetType(String, Boolean, Boolean)

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

Type Hämtar med det angivna namnet och anger om ett undantag ska utlösas om typen inte hittas och om en skiftlägeskänslig sökning ska utföras.

public:
 static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType(string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type

Parametrar

typeName
String

Det sammansättningskvalificerade namnet på den typ som ska hämtas. Se även AssemblyQualifiedName. Om typen finns i den pågående sammansättningen eller i mscorlib.dll/System.Private.CoreLib.dllräcker det att ange typnamnet som kvalificerats av dess namnområde.

throwOnError
Boolean

true för att utlösa ett undantag om typen inte kan hittas. false för att returnera null. Om du false anger utelämnas även vissa andra undantagsvillkor, men inte alla. Se avsnittet Undantag.

ignoreCase
Boolean

trueför att utföra en skiftlägeskänslig sökning efter , för typeNameatt utföra en skiftlägeskänslig sökning efter false. typeName

Returer

Typen med det angivna namnet. Om typen inte hittas anger parametern throwOnError om null returneras eller om ett undantag genereras. I vissa fall genereras ett undantag oavsett värdet throwOnErrorför . Se avsnittet Undantag.

Attribut

Undantag

typeName är null.

En klassinitierare anropas och utlöser ett undantag.

throwOnError är true och typen hittades inte.

-eller-

throwOnError är true och typeName innehåller ogiltiga tecken, till exempel en inbäddad flik.

-eller-

throwOnError är true och typeName är en tom sträng.

-eller-

throwOnError är true och typeName representerar en matristyp med en ogiltig storlek.

-eller-

typeName representerar en matris med TypedReference.

throwOnError är true och typeName innehåller ogiltig syntax. Till exempel "MyType[,*,]".

-eller-

typeName representerar en allmän typ som har en pekartyp, en ByRef typ eller Void som ett av dess typargument.

-eller-

typeName representerar en allmän typ som har ett felaktigt antal typargument.

-eller-

typeName representerar en allmän typ och ett av dess typargument uppfyller inte begränsningarna för motsvarande typparameter.

throwOnError är true och sammansättningen eller något av dess beroenden hittades inte.

Sammansättningen eller något av dess beroenden hittades, men kunde inte läsas in.

Sammansättningen är inte giltig för den inlästa körningen.

Kommentarer

Du kan använda GetType metoden för att hämta ett Type objekt för en typ i en annan sammansättning om du känner till dess sammansättningskvalificerade namn, som kan hämtas från AssemblyQualifiedName. GetType orsakar inläsning av sammansättningen som anges i typeName. Du kan också läsa in en sammansättning med hjälp av Assembly.Load metoden och sedan använda Assembly.GetType metoden eller Assembly.GetTypes för att hämta Type objekt. Om en typ finns i en sammansättning som är känd för ditt program vid kompileringstiden är det mer effektivt att använda typeof i C# eller operatorn GetType i Visual Basic.

endast .NET Framework: GetType fungerar bara på sammansättningar som läses in från disken. Om du anropar GetType för att söka efter en typ som definierats i en dynamisk sammansättning som definierats med hjälp av System.Reflection.Emit tjänsterna kan du få inkonsekvent beteende. Beteendet beror på om den dynamiska sammansättningen är beständig, dvs. skapas med hjälp RunAndSave av uppräkningslägena eller Save åtkomstlägena System.Reflection.Emit.AssemblyBuilderAccess . Om den dynamiska sammansättningen är beständig och har skrivits till disk innan GetType anropas, hittar inläsaren den sparade sammansättningen på disken, läser in sammansättningen och hämtar typen från den sammansättningen. Om sammansättningen inte har sparats på disken när GetType anropas returnerar nullmetoden . GetTypeförstår inte tillfälliga dynamiska sammansättningar. Därför returnerar GetTypeanropande null för att hämta en typ i en tillfällig dynamisk sammansättning .

Om du vill använda GetType på en dynamisk modul i .NET Framework kan du prenumerera på händelsen AppDomain.AssemblyResolve och anropa GetType innan du sparar. Annars får du två kopior av sammansättningen i minnet.

På .NET Core 3.0 och senare versioner påverkas sammansättningsbelastningar som utlöses av det här API:et av det aktuella värdet för AssemblyLoadContext.CurrentContextualReflectionContext.

Parametern throwOnError anger vad som händer när typen inte hittas och undertrycker även vissa andra undantagsvillkor enligt beskrivningen i avsnittet Undantag. Vissa undantag utlöses oavsett värdet throwOnErrorför . Om typen till exempel hittas men inte kan läsas in genereras en TypeLoadException även om throwOnError är false.

I följande tabell visas vilka medlemmar i en basklass som returneras av metoderna när de Get reflekterar över en typ.

Medlemstyp Static Icke-statisk
Constructor No No
Fält No Yes. Ett fält är alltid dolt genom namn och signatur (hide-by-name-and-signature).
Händelse Ej tillämpligt Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan.
Metod No Yes. En metod (både virtuell och icke-virtuell) kan vara hide-by-name eller hide-by-name-and-signature.
Kapslad typ No No
Fastighet Ej tillämpligt Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan.
  1. Dölj efter namn och signatur tar hänsyn till alla delar av signaturen, inklusive anpassade modifierare, returtyper, parametertyper, sentinels och ohanterade anropskonventioner. Det här är en binär jämförelse.

  2. För reflektion är egenskaper och händelser dolda genom namn och signatur. Om du har en egenskap med både en get- och en set-accessor i basklassen, men den härledda klassen bara har en get-accessor, döljer egenskapen i den härledda klassen basklassegenskapen och du kommer inte att kunna komma åt set-accessorn i basklassen.

  3. Anpassade attribut ingår inte i det vanliga typsystemet.

Matriser eller COM-typer söks inte efter om de inte redan har lästs in i tabellen med tillgängliga klasser.

typeName kan vara typnamnet som kvalificerats av dess namnområde eller ett sammansättningskvalificerat namn som innehåller en specifikation för sammansättningsnamn. Se även AssemblyQualifiedName.

Om typeName innehåller namnområdet men inte sammansättningsnamnet söker den här metoden bara efter det anropande objektets sammansättning och mscorlib.dll/System.Private.CoreLib.dll, i den ordningen. Om typeName är fullständigt kvalificerat med det partiella eller fullständiga sammansättningsnamnet söker den här metoden i den angivna sammansättningen. Om sammansättningen har ett starkt namn krävs ett fullständigt sammansättningsnamn.

Egenskapen AssemblyQualifiedName returnerar ett fullständigt kvalificerat typnamn, inklusive kapslade typer, sammansättningsnamnet och typargument. Alla kompilatorer som stöder common language runtime genererar det enkla namnet på en kapslad klass, och reflektion konstruerar ett manglat namn när de efterfrågas, i enlighet med följande konventioner.

Note

Processorarkitektur är en del av sammansättningsidentiteten och kan anges som en del av sammansättningsnamnsträngar. Till exempel "ProcessorArchitecture=msil". Den ingår dock inte i strängen som returneras av AssemblyQualifiedName egenskapen av kompatibilitetsskäl. Du kan också läsa in typer genom att skapa ett AssemblyName objekt och skicka det till en lämplig överlagring av Load metoden. Du kan sedan använda Assembly.GetType metoden för att läsa in typer från sammansättningen. Se även AssemblyName.ProcessorArchitecture.

Avgränsare Innebörd
Omvänt snedstreck (\) Escape-tecken.
Backtick (') Föregår en eller flera siffror som representerar antalet typparametrar som finns i slutet av namnet på en allmän typ.
Hakparenteser ([]) Omsluta en argumentlista av allmän typ för en konstruerad generisk typ. i en typargumentlista omger du en sammansättningskvalificerad typ.
Kommatecken (,) Föregår sammansättningsnamnet.
Period (.) Anger namnområdesidentifierare.
Plustecken (+) Föregår en kapslad klass.

Till exempel kan det fullständigt kvalificerade namnet för en klass se ut så här:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Om namnområdet var TopNamespace.Sub+Namespace måste strängen föregå plustecknet (+) med ett escape-tecken (\) för att förhindra att det tolkas som en kapslingsavgränsare. Reflektion genererar den här strängen på följande sätt:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

En "++" blir "\+\+" och "\" blir "\\".

Det här kvalificerade namnet kan sparas och senare användas för att läsa in Type. Om du vill söka efter och läsa in en Typeanvänder du GetType antingen endast typnamnet eller med namnet på den kvalificerade sammansättningstypen. GetType med typnamnet söker bara efter Type i anroparens sammansättning och sedan i systemsammansättningen. GetType med namnet på den kvalificerade sammansättningstypen letar Type efter i valfri sammansättning.

Typnamn kan innehålla avslutande tecken som anger ytterligare information om typen, till exempel om typen är en referenstyp, en pekartyp eller en matristyp. Om du vill hämta typnamnet utan dessa avslutande tecken använder du t.GetElementType().ToString(), där t är typen.

Blanksteg är relevanta för alla typnamnskomponenter förutom sammansättningsnamnet. I sammansättningsnamnet är blanksteg före avgränsaren relevanta, men blanksteg efter avgränsaren ignoreras.

Namnet på en allmän typ slutar med en backtick (') följt av siffror som representerar antalet argument av allmän typ. Syftet med det här namnet är att tillåta kompilatorer att stödja generiska typer med samma namn men med olika antal typparametrar, som förekommer i samma omfång. Reflektion returnerar till exempel de manglade namnen Tuple`1 och Tuple`2 från de generiska metoderna Tuple(Of T) och Tuple(Of T0, T1) i Visual Basic, eller Tuple<T> och Tuple<T0, T1> i Visual C#.

För generiska typer omges typargumentlistan inom hakparenteser och typargumenten avgränsas med kommatecken. En allmän Dictionary<TKey,TValue> har till exempel två typparametrar. En Dictionary<TKey,TValue> av MyType med nycklar av typen String kan representeras på följande sätt:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Om du vill ange en sammansättningskvalificerad typ i en typargumentlista omger du den sammansättningskvalificerade typen inom hakparenteser. Annars tolkas kommatecken som avgränsar delarna av det sammansättningskvalificerade namnet som avgränsa ytterligare typargument. Till exempel kan en Dictionary<TKey,TValue> av MyType från MyAssembly.dll, med nycklar av typen String, anges på följande sätt:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Note

En sammansättningskvalificerad typ kan endast omges av hakparenteser när den visas i en typparameterlista. Reglerna för att söka efter kvalificerade och okvalificerade typer i typparameterlistor är desamma som reglerna för kvalificerade och okvalificerade icke-generiska typer.

Nullbara typer är ett specialfall av generiska typer. Till exempel representeras en nullbar Int32 av strängen "System.Nullable'1[System.Int32]".

Note

Du kan också få null-typer med hjälp av typoperatorer. Till exempel returneras typen nullable Boolean av typeof(Nullable<bool>) i C# och av GetType(Nullable(Of Boolean)) i Visual Basic.

I följande tabell visas den syntax som du använder för GetType olika typer.

Hämta Använd
En nullbar Int32 Type.GetType("System.Nullable`1[System.Int32]")
En ohanterad pekare till MyType Type.GetType("MyType*")
En ohanterad pekare till en pekare till MyType Type.GetType("MyType**")
En hanterad pekare eller referens till MyType Type.GetType("MyType&"). Observera att till skillnad från pekare är referenser begränsade till en nivå.
En överordnad klass och en kapslad klass Type.GetType("MyParentClass+MyNestedClass")
En endimensionell matris med en lägre gräns på 0 Type.GetType("MyArray[]")
En endimensionell matris med en okänd nedre gräns Type.GetType("MyArray[*]")
En n-dimensionell matris Ett kommatecken (,) inom hakparenteserna totalt n-1 gånger. Representerar till exempel System.Object[,,] en tredimensionell Object matris.
En tvådimensionell matriss matris Type.GetType("MyArray[][]")
En rektangulär tvådimensionell matris med okända nedre gränser Type.GetType("MyArray[,]")
En allmän typ med ett typargument Type.GetType("MyGenericType`1[MyType]")
En allmän typ med två typargument Type.GetType("MyGenericType`2[MyType,AnotherType]")
En allmän typ med två sammansättningskvalificerade typargument Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
En sammansättningskvalificerad allmän typ med ett argument av typen sammansättningskvalificerad typ Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
En allmän typ vars typargument är en allmän typ med två typargument Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

Se även

Gäller för

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)

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

Hämtar typen med det angivna namnet, om du vill ange anpassade metoder för att matcha sammansättningen och typen.

public:
 static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type

Parametrar

typeName
String

Namnet på den typ som ska hämtas. Om parametern typeResolver anges kan typnamnet vara valfri sträng som typeResolver kan matchas. Om parametern assemblyResolver anges eller om standardtypmatchning används typeName måste vara ett sammansättningskvalificerat namn (se AssemblyQualifiedName), såvida inte typen finns i den pågående sammansättningen eller i mscorlib.dll/System.Private.CoreLib.dll, i vilket fall det räcker att ange det typnamn som kvalificerats av dess namnområde.

assemblyResolver
Func<AssemblyName,Assembly>

En metod som letar upp och returnerar sammansättningen som anges i typeName. Sammansättningsnamnet skickas till assemblyResolver som ett AssemblyName objekt. Om typeName inte innehåller namnet på en sammansättning assemblyResolver anropas inte. Om assemblyResolver inte anges utförs standardmonteringsupplösningen.

Varning: Skicka inte metoder från okända eller ej betrodda anropare. Detta kan leda till utökade privilegier för skadlig kod. Använd endast metoder som du anger eller som du är bekant med.

typeResolver
Func<Assembly,String,Boolean,Type>

En metod som letar upp och returnerar den typ som anges av typeName från sammansättningen som returneras av assemblyResolver eller av standardsammansättningsmatchning. Om ingen sammansättning tillhandahålls typeResolver kan metoden tillhandahålla en. Metoden tar också en parameter som anger om en skiftlägeskänslig sökning ska utföras. false skickas till den parametern.

Varning: Skicka inte metoder från okända eller ej betrodda anropare.

Returer

Typen med det angivna namnet eller null om typen inte hittas.

Attribut

Undantag

typeName är null.

En klassinitierare anropas och utlöser ett undantag.

Ett fel uppstår när typeName parsas till ett typnamn och ett sammansättningsnamn (till exempel när det enkla typnamnet innehåller ett specialtecken som inte är kapslat).

-eller-

typeName representerar en allmän typ som har en pekartyp, en ByRef typ eller Void som ett av dess typargument.

-eller-

typeName representerar en allmän typ som har ett felaktigt antal typargument.

-eller-

typeName representerar en allmän typ och ett av dess typargument uppfyller inte begränsningarna för motsvarande typparameter.

typeName representerar en ogiltig typ, till exempel en matris med TypedReference.

Sammansättningen eller något av dess beroenden hittades, men kunde inte läsas in.

-eller-

typeName innehåller ett ogiltigt sammansättningsnamn.

-eller-

typeName är ett giltigt sammansättningsnamn utan ett typnamn.

Sammansättningen eller något av dess beroenden är inte giltigt för den inlästa körningen.

Kommentarer

Användningsscenarier för den här metoden och information om parametrarna assemblyResolver och typeResolver finns i GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metodens överlagring.

Note

Om typeName det inte går att hitta returnerar GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)anropet null till metoden . Det utlöser inget undantag. Om du vill kontrollera om ett undantag utlöses anropar du en överlagring av metoden GetType som har en throwOnError parameter.

Att anropa den här metodens överlagring är samma sak som att anropa GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metodens överlagring och ange false för parametrarna throwOnError och ignoreCase .

Gäller för

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)

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

Hämtar typen med det angivna namnet, anger om ett undantag ska utlösas om typen inte hittas och om du vill tillhandahålla anpassade metoder för att lösa sammansättningen och typen.

public:
 static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type

Parametrar

typeName
String

Namnet på den typ som ska hämtas. Om parametern typeResolver anges kan typnamnet vara valfri sträng som typeResolver kan matchas. Om parametern assemblyResolver anges eller om standardtypmatchning används typeName måste vara ett sammansättningskvalificerat namn (se AssemblyQualifiedName), såvida inte typen finns i den pågående sammansättningen eller i mscorlib.dll/System.Private.CoreLib.dll, i vilket fall det räcker att ange det typnamn som kvalificerats av dess namnområde.

assemblyResolver
Func<AssemblyName,Assembly>

En metod som letar upp och returnerar sammansättningen som anges i typeName. Sammansättningsnamnet skickas till assemblyResolver som ett AssemblyName objekt. Om typeName inte innehåller namnet på en sammansättning assemblyResolver anropas inte. Om assemblyResolver inte anges utförs standardmonteringsupplösningen.

Varning: Skicka inte metoder från okända eller ej betrodda anropare. Detta kan leda till utökade privilegier för skadlig kod. Använd endast metoder som du anger eller som du är bekant med.

typeResolver
Func<Assembly,String,Boolean,Type>

En metod som letar upp och returnerar den typ som anges av typeName från sammansättningen som returneras av assemblyResolver eller av standardsammansättningsmatchning. Om ingen sammansättning tillhandahålls kan metoden tillhandahålla en. Metoden tar också en parameter som anger om en skiftlägeskänslig sökning ska utföras. false skickas till den parametern.

Varning: Skicka inte metoder från okända eller ej betrodda anropare.

throwOnError
Boolean

true för att utlösa ett undantag om typen inte kan hittas. false för att returnera null. Om du false anger utelämnas även vissa andra undantagsvillkor, men inte alla. Se avsnittet Undantag.

Returer

Typen med det angivna namnet. Om typen inte hittas anger parametern throwOnError om null returneras eller om ett undantag genereras. I vissa fall genereras ett undantag oavsett värdet throwOnErrorför . Se avsnittet Undantag.

Attribut

Undantag

typeName är null.

En klassinitierare anropas och utlöser ett undantag.

throwOnError är true och typen hittades inte.

-eller-

throwOnError är true och typeName innehåller ogiltiga tecken, till exempel en inbäddad flik.

-eller-

throwOnError är true och typeName är en tom sträng.

-eller-

throwOnError är true och typeName representerar en matristyp med en ogiltig storlek.

-eller-

typeName representerar en matris med TypedReference.

Ett fel uppstår när typeName parsas till ett typnamn och ett sammansättningsnamn (till exempel när det enkla typnamnet innehåller ett specialtecken som inte är kapslat).

-eller-

throwOnError är true och typeName innehåller ogiltig syntax (till exempel "MyType[,*,]").

-eller-

typeName representerar en allmän typ som har en pekartyp, en ByRef typ eller Void som ett av dess typargument.

-eller-

typeName representerar en allmän typ som har ett felaktigt antal typargument.

-eller-

typeName representerar en allmän typ och ett av dess typargument uppfyller inte begränsningarna för motsvarande typparameter.

throwOnError är true och sammansättningen eller något av dess beroenden hittades inte.

-eller-

typeName innehåller ett ogiltigt sammansättningsnamn.

-eller-

typeName är ett giltigt sammansättningsnamn utan ett typnamn.

Sammansättningen eller något av dess beroenden hittades, men kunde inte läsas in.

Sammansättningen eller något av dess beroenden är inte giltigt för den inlästa körningen.

Kommentarer

Användningsscenarier för den här metoden och information om parametrarna assemblyResolver och typeResolver finns i GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metodens överlagring.

Att anropa den här metodens överlagring är samma sak som att anropa GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metodens överlagring och ange false för parametern ignoreCase .

Gäller för

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)

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

Hämtar typen med det angivna namnet, anger om en skiftlägeskänslig sökning ska utföras och om ett undantag ska utlösas om typen inte hittas och om du vill ange anpassade metoder för att lösa sammansättningen och typen.

public:
 static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type

Parametrar

typeName
String

Namnet på den typ som ska hämtas. Om parametern typeResolver anges kan typnamnet vara valfri sträng som typeResolver kan matchas. Om parametern assemblyResolver anges eller om standardtypmatchning används typeName måste vara ett sammansättningskvalificerat namn (se AssemblyQualifiedName), såvida inte typen finns i den pågående sammansättningen eller i mscorlib.dll/System.Private.CoreLib.dll, i vilket fall det räcker att ange det typnamn som kvalificerats av dess namnområde.

assemblyResolver
Func<AssemblyName,Assembly>

En metod som letar upp och returnerar sammansättningen som anges i typeName. Sammansättningsnamnet skickas till assemblyResolver som ett AssemblyName objekt. Om typeName inte innehåller namnet på en sammansättning assemblyResolver anropas inte. Om assemblyResolver inte anges utförs standardmonteringsupplösningen.

Varning: Skicka inte metoder från okända eller ej betrodda anropare. Detta kan leda till utökade privilegier för skadlig kod. Använd endast metoder som du anger eller som du är bekant med.

typeResolver
Func<Assembly,String,Boolean,Type>

En metod som letar upp och returnerar den typ som anges av typeName från sammansättningen som returneras av assemblyResolver eller av standardsammansättningsmatchning. Om ingen sammansättning tillhandahålls kan metoden tillhandahålla en. Metoden tar också en parameter som anger om en skiftlägeskänslig sökning ska utföras. värdet ignoreCase för skickas till parametern.

Varning: Skicka inte metoder från okända eller ej betrodda anropare.

throwOnError
Boolean

true för att utlösa ett undantag om typen inte kan hittas. false för att returnera null. Om du false anger utelämnas även vissa andra undantagsvillkor, men inte alla. Se avsnittet Undantag.

ignoreCase
Boolean

trueför att utföra en skiftlägeskänslig sökning efter , för typeNameatt utföra en skiftlägeskänslig sökning efter false. typeName

Returer

Typen med det angivna namnet. Om typen inte hittas anger parametern throwOnError om null returneras eller om ett undantag genereras. I vissa fall genereras ett undantag oavsett värdet throwOnErrorför . Se avsnittet Undantag.

Attribut

Undantag

typeName är null.

En klassinitierare anropas och utlöser ett undantag.

throwOnError är true och typen hittades inte.

-eller-

throwOnError är true och typeName innehåller ogiltiga tecken, till exempel en inbäddad flik.

-eller-

throwOnError är true och typeName är en tom sträng.

-eller-

throwOnError är true och typeName representerar en matristyp med en ogiltig storlek.

-eller-

typeName representerar en matris med TypedReference.

Ett fel uppstår när typeName parsas till ett typnamn och ett sammansättningsnamn (till exempel när det enkla typnamnet innehåller ett specialtecken som inte är kapslat).

-eller-

throwOnError är true och typeName innehåller ogiltig syntax (till exempel "MyType[,*,]").

-eller-

typeName representerar en allmän typ som har en pekartyp, en ByRef typ eller Void som ett av dess typargument.

-eller-

typeName representerar en allmän typ som har ett felaktigt antal typargument.

-eller-

typeName representerar en allmän typ och ett av dess typargument uppfyller inte begränsningarna för motsvarande typparameter.

throwOnError är true och sammansättningen eller något av dess beroenden hittades inte.

Sammansättningen eller något av dess beroenden hittades, men kunde inte läsas in.

-eller-

typeName innehåller ett ogiltigt sammansättningsnamn.

-eller-

typeName är ett giltigt sammansättningsnamn utan ett typnamn.

Sammansättningen eller något av dess beroenden är inte en giltig sammansättning för den inlästa körningen.

Kommentarer

Om assemblyResolver är null i .NET Core 3.0 och senare versioner påverkas sammansättningsbelastningar som utlöses av det här API:et av det aktuella värdet för AssemblyLoadContext.CurrentContextualReflectionContext.

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) Använd metodens överlagring och tillhörande överlagringar (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) och GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)) för att ersätta standardimplementeringen GetType av metoden med mer flexibla implementeringar. Genom att ange egna metoder som löser typnamn och namnen på de sammansättningar som innehåller dem kan du göra följande:

  • Kontrollera vilken version av en sammansättning som en typ läses in från.
  • Ange en annan plats för att söka efter ett typnamn som inte innehåller ett sammansättningsnamn.
  • Läs in sammansättningar med hjälp av partiella sammansättningsnamn.
  • Returnera underklasser av System.Type som inte har skapats av Common Language Runtime (CLR).

I versionstolerant serialisering kan du till exempel söka efter en "best fit"-sammansättning med hjälp av ett partiellt namn. Andra överlagringar av GetType metoden kräver ett sammansättningskvalificerat typnamn, som innehåller versionsnumret.

Alternativa implementeringar av typsystemet kan behöva returnera underklasser av System.Type som inte har skapats av CLR. Alla typer som returneras av andra överlagringar av metoden GetType är runtime-typer.

Användningsanteckningar

Den här metoden och dess associerade överbelastningar parsar typeName till namnet på en typ och namnet på en samling, och löser därefter namnen. Lösning av assemblynamnet sker innan lösningen av typnamnet, eftersom ett typnamn måste lösas inom kontexten av en assembly.

Note

Om du inte känner till begreppet sammansättningskvalificerade typnamn kan du läsa egenskapen AssemblyQualifiedName .

Om typeName inte är ett sammansättningskvalificerat namn, utlämnas lösningen av sammansättningen. Okvalificerade typnamn kan lösas i samband med mscorlib.dll/System.Private.CoreLib.dll eller den löpande sammansättningen, eller så kan du ange en sammansättning i parametern typeResolver . Effekterna av att inkludera eller utelämna sammansättningsnamnet för olika typer av namnmatchning visas som en tabell i avsnittet Mixad namnmatchning .

Allmänna användningsanteckningar:

  • Skicka inte metoder till assemblyResolver eller typeResolver om de kommer från okända eller obetrodda uppringare. Använd endast metoder som du anger eller som du är bekant med.

    Caution

    Om du använder metoder från okända eller ej betrodda anropare kan det leda till utökade privilegier för skadlig kod.

  • Om du utelämnar parametrarna assemblyResolver och/eller typeResolver skickas värdet för parametern throwOnError till de metoder som utför standardmatchningen.

  • Om throwOnError är truegenererar den här metoden en TypeLoadException när typeResolver returnerar null, och en FileNotFoundException när assemblyResolver returnerar null.

  • Den här metoden fångar inte undantag som genereras av assemblyResolver och typeResolver. Du ansvarar för alla undantag som genereras av matchningsmetoderna.

Lös sammansättningar

Metoden assemblyResolver tar emot ett AssemblyName objekt som skapas genom att parsa strängsammansättningens namn som ingår i typeName. Om typeName inte innehåller ett sammansättningsnamn assemblyResolver anropas inte och null skickas till typeResolver.

Om assemblyResolver inte anges används standardsammansättningssökning för att hitta sammansättningen. Om assemblyResolver anges utför GetType-metoden inte standardsökning. Därför måste du säkerställa att ditt assemblyResolver kan hantera alla assembly-filer som du skickar till den.

assemblyResolver-metoden bör returnera null om assemblyn inte kan lösas. Om assemblyResolver returnerar null, typeResolver anropas inte, och ingen ytterligare bearbetning sker; dessutom, om throwOnError är true, kastas en FileNotFoundException.

Om det AssemblyName som skickas till assemblyResolver är ett partiellt namn är nullen eller flera av dess delar . Om den till exempel inte har någon version är Version egenskapen null. Om egenskapen Version, egenskapen CultureInfo och metoden GetPublicKeyToken alla returnerar null, returneras endast det enkla namnet på sammansättningen. Metoden assemblyResolver kan använda eller ignorera alla delar av sammansättningsnamnet.

Effekterna av olika alternativ för sammansättningslösning visas som en tabell i avsnittet Blandad namnlösning, för enkla och sammansättningskvalificerade typnamn.

Lösa typer

Om typeName inte anger ett sammansättningsnamn typeResolver anropas alltid. Om typeName anger ett sammansättningsnamn typeResolver anropas endast när sammansättningsnamnet har lösts. Om assemblyResolver eller standard avsökning av sammansättning returnerar null, anropas typeResolver inte.

Metoden typeResolver tar emot tre argument:

  • Sammansättningen som ska sökas eller null om typeName inte innehåller ett namn för en sammansättning.
  • Det enkla namnet på typen. När det gäller en kapslad typ är detta den yttersta innehållstypen. När det gäller en allmän typ är detta det enkla namnet på den generiska typen.
  • Ett booleskt värde som är true om fallet med typnamn ska ignoreras.

Implementeringen avgör hur dessa argument används. Metoden typeResolver bör returnera null om den inte kan lösa typen. Om typeResolver returnerar null och throwOnError är true, genererar GetType en TypeLoadException.

Effekterna av olika alternativ för typlösning visas som en tabell i avsnittet Blandad namnlösning för enkla och sammansättningskvalificerade typnamn.

Lösa upp kapslade typer

Om typeName är en kapslad typ skickas endast namnet på den yttersta innehållande typen till typeResolver. När typeResolver returnerar den här typen GetNestedType anropas metoden rekursivt tills den innersta kapslade typen har lösts.

Lösa allmänna typer

GetType Kallas rekursivt för att lösa generiska typer: Först för att lösa själva den generiska typen och sedan för att lösa dess typargument. Om ett typargument är generiskt GetType anropas rekursivt för att lösa dess typargument och så vidare.

Kombinationen av assemblyResolver och typeResolver som du anger måste kunna matcha alla nivåer av den här rekursionen. Anta till exempel att du anger en assemblyResolver som styr inläsningen av MyAssembly. Anta att du vill lösa den allmänna typen Dictionary<string, MyType> (Dictionary(Of String, MyType) i Visual Basic). Du kan skicka följande generiska typnamn:

"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"

Observera att MyType är det enda argumentet för en sammansättningskvalificerad typ. Namnen på klasserna Dictionary<TKey,TValue> och String är inte sammansättningskvalificerade. Du typeResolver måste kunna hantera antingen en sammansättning eller null, eftersom den kommer att ta emot null för Dictionary<TKey,TValue> och String. Den kan hantera det fallet genom att anropa en överlagring av metoden GetType som tar en sträng, eftersom båda de okvalificerade typnamnen finns i mscorlib.dll/System.Private.CoreLib.dll:

Type t = Type.GetType(test,
                      (aName) => aName.Name == "MyAssembly" ?
                          Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : null,
                      (assem, name, ignore) => assem == null ?
                          Type.GetType(name, false, ignore) :
                              assem.GetType(name, false, ignore)
                     );
let t =
    Type.GetType(test,
        (fun aName ->
            if aName.Name = "MyAssembly" then
                Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
            else null),
        fun assem name ignr ->
            if assem = null then
                Type.GetType(name, false, ignr)
            else
                assem.GetType(name, false, ignr))

Metoden assemblyResolver anropas inte för ordlistetypen och strängtypen eftersom dessa typnamn inte är sammansättningskvalificerade.

Anta nu att i stället för System.Stringär YourTypeden första generiska argumenttypen , från YourAssembly:

"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"

Eftersom den här sammansättningen varken är mscorlib.dll/System.Private.CoreLib.dll eller den löpande sammansättningen kan du inte lösa YourType det utan ett sammansättningskvalificerat namn. Eftersom ditt assemblyResolve kommer att anropas rekursivt måste det kunna hantera det här fallet. I stället för att null returnera för andra sammansättningar än MyAssemblyutför den nu en sammansättningsbelastning med hjälp av det angivna AssemblyName objektet.

Type t2 = Type.GetType(test,
                       (aName) => aName.Name == "MyAssembly" ?
                           Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
                           Assembly.Load(aName),
                       (assem, name, ignore) => assem == null ?
                           Type.GetType(name, false, ignore) :
                               assem.GetType(name, false, ignore), true
                      );
let t2 =
    Type.GetType(test,
        (fun aName ->
            if aName.Name = "MyAssembly" then
                Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
            else Assembly.Load aName),
        (fun assem name ignr ->
            if assem = null then
                Type.GetType(name, false, ignr)
            else
                assem.GetType(name, false, ignr)), true)
Lösa typnamn med specialtecken

Vissa tecken har särskilda betydelser i sammansättningskvalificerade namn. Om ett enkelt typnamn innehåller dessa tecken orsakar tecknen parsningsfel när det enkla namnet ingår i ett sammansättningskvalificerat namn. För att undvika parsningsfel måste du undvika specialtecken med ett omvänt snedstreck innan du kan skicka det sammansättningskvalificerade namnet till GetType metoden. Om en typ till exempel heter Strange]Typemåste escape-tecknet läggas till före hakparentesen på följande sätt: Strange\]Type.

Note

Namn med sådana specialtecken kan inte skapas i Visual Basic eller C#, men kan skapas med hjälp av ett gemensamt mellanliggande språk (CIL) eller genom att generera dynamiska sammansättningar.

I följande tabell visas specialtecken för typnamn.

Karaktär Innebörd
, (kommatecken) Avgränsare för sammansättningskvalificerade namn.
[] (hakparenteser) Som ett suffixpar anger det en matristyp; som ett avgränsningspar omger det generiska argumentlistor och assembly-kvalificerade namn.
& (et-tecken) Som suffix anger att en typ är en referenstyp.
* (asterisk) Suffixet anger att en typ är en pekartyp.
+ (plus) Avgränsare för kapslade typer.
\ (omvänt snedstreck) Escape-tecken.

Egenskaper som AssemblyQualifiedName att returnera korrekt undantagna strängar. Du måste skicka korrekt undantagna strängar till GetType metoden. Metoden skickar i sin tur GetType korrekt undantagna namn till typeResolver och till standardtypmatchningsmetoderna. Om du behöver jämföra ett namn med ett namn utan escape-tecken i typeResolver, måste du ta bort escape-tecken.

Lösning för blandat namn

I följande tabell sammanfattas interaktionerna mellan assemblyResolver, typeResolveroch standardnamnmatchningen för alla kombinationer av typnamn och sammansättningsnamn i typeName:

Innehåll av typnamn Metod för sammansättningslösare Typlösarmetod Result
typ, sammansättning noll noll Motsvarar att anropa den överlagrade Type.GetType(String, Boolean, Boolean)-metoden.
typ, sammansättning tillhandahållen noll assemblyResolver returnerar sammansättningen eller returnerar null om den inte kan matcha sammansättningen. Om sammansättningen är löst används metodöverbelastningen Assembly.GetType(String, Boolean, Boolean) för att läsa in typen från sammansättningen. Annars görs inget försök att matcha typen.
typ, sammansättning noll tillhandahållen Motsvarar att konvertera sammansättningsnamnet till ett AssemblyName objekt och anropa Assembly.Load(AssemblyName) metodens överlagring för att hämta sammansättningen. Om sammansättningen har lösts skickas den till typeResolver. Annars typeResolver anropas den inte och det görs inga ytterligare försök att matcha typen.
typ, sammansättning tillhandahållen tillhandahållen assemblyResolver returnerar sammansättningen eller returnerar null om den inte kan matcha sammansättningen. Om sammansättningen har lösts skickas den till typeResolver. Annars typeResolver anropas den inte och det görs inga ytterligare försök att matcha typen.
type null, tillhandahålls noll Motsvarar att anropa den överlagrade Type.GetType(String, Boolean, Boolean)-metoden. Eftersom sammansättningsnamnet inte anges genomsöks endast mscorlib.dll/System.Private.CoreLib.dll och den pågående sammansättningen. Om assemblyResolver anges ignoreras det.
type null, tillhandahålls tillhandahållen typeResolver anropas och null skickas för kompileringen. typeResolver kan ange en typ från valfri sammansättning, inklusive sammansättningar som den läser in för ändamålet. Om assemblyResolver anges ignoreras det.
församling null, tillhandahålls null, tillhandahålls Ett FileLoadException kastas eftersom sammansättningsnamnet parsas som om det vore ett typnamn som är kvalificerat för sammanställning. Detta resulterar i ett ogiltigt sammansättningsnamn.

Gäller för