Obtenir la valeur de Dictionnaire<string, object> sans unboxing?

Je me demandais si il est possible d'exécuter le code suivant mais sans l'unboxing de la ligne:-

t.Value = (T)x;

Ou peut-être si il ya une autre façon de faire ce genre d'opération?

Voici le code complet:-

public class ValueWrapper<T>
{
    public T Value { get; set; }
    public bool HasValue { get; set; }

    public ValueWrapper()
    {
        HasValue = false;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Dictionary<string, object> myDictionary = new Dictionary<string, object>();

        myDictionary.Add("key1", 6);
        myDictionary.Add("key2", "a string");

        var x2 = GetValue<int>(myDictionary, "key1");
        if (x2.HasValue)
            Console.WriteLine("'{0}' = {1}", "key1", x2.Value);
        else
            Console.WriteLine("No value found");

        Console.ReadLine();
    }

    static ValueWrapper<T> GetValue<T>(IDictionary<string, object> dictionary, string key)
    {
        ValueWrapper<T> t = new ValueWrapper<T>();

        object x = null;
        if (dictionary.TryGetValue(key, out x))
        {
            if (x.GetType() == typeof(T))
            {
                t.Value = (T)x;
                t.HasValue = true;
            }
        }

        return t;
    }
}

Merci d'avance!!

Richard.

Non, si votre object est une boîte de type de valeur, alors il faut être "unboxed". Est-il une raison pourquoi vous voulez éviter les unboxing?
Surtout pour la performance de mon projet où ce code est utilisé avec d'autres trucs de l'unboxing augmente le temps d'exécution d' ~200ms à ~1700ms. Ce qui est encore acceptable, je voulais juste savoir pour mon propre avantage, s'il existe une alternative.
Il est extrêmement peu probable que cela drastique de la dégradation des performances est due à unboxing. Utiliser un profiler pour déterminer quel est le véritable goulot d'étranglement.

OriginalL'auteur Richard Adnams | 2010-10-20