Unsafe.Unbox<T>(Object) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Retourne mutable ref
à une valeur boxed.
public:
generic <typename T>
where T : value class static T % Unbox(System::Object ^ box);
public static ref T Unbox<T> (object box) where T : struct;
static member Unbox : obj -> 'T (requires 'T : struct)
Public Shared Function Unbox(Of T As Structure) (box As Object) As T
Paramètres de type
- T
Type à déballer.
Paramètres
- box
- Object
Valeur pour laquelle effectuer un unboxing.
Retours
Un mutable ref
à la valeur boxed box
.
Exceptions
box
est null
et T
est un type de valeur non Nullable.
T
est introuvable.
Remarques
La Unbox<T>
méthode est simplement un wrapper pour l’instruction unbox il . Il est utile en tant qu’optimisation des performances. Chaque fois qu’une API qui prend un Object doit être appelée à plusieurs reprises avec des valeurs différentes d’un type valeur, le même objet box peut être réutilisé plutôt qu’un nouvel objet créé à chaque fois.
La Unbox<T>
méthode a une contrainte d’utilisation importante qui n’est pas appliquée par les compilateurs de langage et qui est la responsabilité de l’appelant. L’instruction IL unbox
retourne un pointeur managé de mutabilité contrôlée. Étant donné que les compilateurs de langage .NET et .NET ne peuvent pas représenter cette contrainte, la Unbox<T>
méthode retourne un mutable ref T
normal. Toutefois, les développeurs ne doivent pas muter la référence retournée, sauf s’ils sont certains qu’il T
s’agit d’un type de struct mutable. Par exemple, étant donné que les primitives numériques telles que Int32 ne sont pas des types de struct mutables, le code suivant n’est pas suppporté :
// The following line is NOT SUPPORTED.
Unsafe.Unbox<int>(obj) = 30;
En revanche, un type tel que Point est un struct mutable avec des setters de propriétés publiques. Ainsi, la mutation de la valeur boxée en appelant les setters de propriété est prise en charge :
// The following lines are legal and supported.
Unsafe.Unbox<System.Drawing.Point>(obj).X = 50;
Unsafe.Unbox<System.Drawing.Point>(obj).Y = 70;
Toutefois, le remplacement de l’intégralité de la vente en gros de référence n’est pas pris en charge, même si la référence est à un type de struct mutable.
// Resetting the reference to default(T) is NOT SUPPORTED.
Unsafe.Unbox<System.Drawing.Point>(obj) = default(System.Drawing.Point);
// Setting the reference to a completely new value is NOT SUPPORTED.
Unsafe.Unbox<System.Drawing.Point>(obj) = new System.Drawing.Point(50, 70);
Pour plus d’informations, y compris une présentation détaillée des contraintes d’utilisation de cette instruction, consultez les sections III.1.8.1.2.2 (« Pointeurs managés de mutabilité contrôlée ») et III.4.32 (« unbox - convert boxed boxed value type to its raw form ») dans ECMA-335 : Common Language Infrastructure (CLI) .