Partager via


Unsafe.Unbox<T>(Object) Méthode

Définition

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

T

Un mutable ref à la valeur boxed box.

Exceptions

box est null et T est un type de valeur non Nullable.

box n’est pas un type de valeur boxed.

- ou -

box n’est pas un T boxed.

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 Tnormal. 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) .

S’applique à