4

首先让我说我知道它是一个受保护的方法,我不应该调用它,但它不应该工作,因为MemberwiseClone是在Object类中定义的并且String继承自它吗?

所以这是克隆方法(我删除了空引用处理以专注于重要的事情):

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");

结果字符串 (str) 将是:

"M\0\0\0\0\0\0\0\0"

提前致谢!

4

1 回答 1

3

您正在调用它并且它正在工作。问题是它String.MemberwiseClone没有做你期望它做的事情。它似乎创建了一个与原始字符串长度相同的字符串,但只复制了第一个字符。

我认为这里要吸取的教训是:当你调用一个你不应该调用的方法时,要非常小心,了解它的作用,不要假设太多。

于 2012-05-17T23:20:11.303 回答