J'ai quelques problèmes en passant une référence à un objet qui est de type générique. J'ai trouvé un moyen de contourner le problème en créant un 'objet' et en faisant référence à cela plutôt qu'à l'original - mais il me semble que cela me sent un peu. Y a-t-il un meilleur moyen ici ou dois-je vivre avec? Je comprends la première erreur mais la seconde m'échappe.Utilisation d'une référence à un objet générique en tant que paramètre
public static T Foo<T>(ref T Bar)
{
T Result;
// Next line gives
// cannot convert from 'ref T' to 'ref object'
Result = (T)ModifyObject (ref Bar);
// Next line gives
// A ref or out argument must be an assignable variable
Result = (T)ModifyObject (ref ((Object)Bar));
// Works
Object Tmp = Bar;
Result = (T)ModifyObject (ref Tmp));
return Result;
}
public static Object DoSomthing(ref Object Obj) {
Object Result = Activator.CreateInstance (Obj.GetType())
//...
}
DoQuelquechose n'est pas générique car il utilise la récursion où le type d'Obj peut changer. J'essayais de ne pas utiliser la réflexion pour en appeler une version générique, mais en postant peut-être que ce serait une meilleure option?
Avez-vous vraiment besoin de le transmettre par référence? Inside DoSomething, attribuez-vous à Obj? – Henrik
Et idem dans Foo! –
(Voir http://pobox.com/~skeet/csharp/parameters.html pour plus d'informations sur la réf.) –