Permettez-moi de commencer par dire que je sais que c'est une méthode protégée et je ne suis pas censé l'appeler, mais il ne devrait pas travailler depuis MemberwiseClone est défini dans le objet classe et chaîne hérite de celui-ci ?La méthode String.MemberwiseClone() appelée par réflexion ne fonctionne pas, pourquoi?
C'est donc la méthode de clonage (j'ai supprimé le traitement de référence null se concentrer sur ce qui est important):
public static T ShallowClone<T>(T obj)
{
MethodInfo memberwiseClone;
memberwiseClone = obj.GetType().GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic);
return (T)memberwiseClone.Invoke(obj, null);
}
Et si je l'appelle comme ceci:
string str = ShallowClone("My string");
La chaîne résultante (str) sera:
"M\0\0\0\0\0\0\0\0"
Merci à l'avance!
Wild guess: le natif sous-jacent est un pointeur, 'MemberwiseClone' prend la valeur (c'est-à-dire le premier caractère) et la longueur sans copier le reste. – Ryan
Quel est le point de cloner une chaîne? – spender
Je clonais des éléments d'une collection et je trouvais une chaîne le long du chemin ... –