Позвольте мне начать с того, что я знаю, что это защищенный метод, и я не должен называть его, но она не должна работать, так как MemberwiseClone определяется в объекта класса и строки наследует от него ?Метод String.MemberwiseClone(), вызванный через отражение, не работает, почему?
Так что это метод клонирования (я удалил нулевую обработку ссылочный сосредоточиться на том, что важно):
public static T ShallowClone<T>(T obj)
{
MethodInfo memberwiseClone;
memberwiseClone = obj.GetType().GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic);
return (T)memberwiseClone.Invoke(obj, null);
}
И если я называю это так:
string str = ShallowClone("My string");
Результирующая строка (ул) будет:
"M\0\0\0\0\0\0\0\0"
Заранее благодарен!
Дикая догадка: основной нативный указатель, 'MemberwiseClone' принимает значение (т. Е. Первый символ) и длину, не копируя остальную часть. – Ryan
В чем смысл клонирования строки? – spender
Я клонировал элементы из коллекции и случайно нашел строку на этом пути ... –