c# - 通过反射调用的 String.MemberwiseClone() 方法不起作用,为什么?

标签 c# reflection shallow-clone

首先让我说我知道它是一个 protected 方法,我不应该调用它,但它不应该工作,因为 MemberwiseClone 是在 Object< 中定义的/strong> 类和 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"

提前致谢!

最佳答案

您正在调用它,它正在运行。问题是 String.MemberwiseClone 没有按照您的预期进行。它似乎创建了一个与原始字符串长度相同的字符串,但只复制了第一个字符。

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

关于c# - 通过反射调用的 String.MemberwiseClone() 方法不起作用,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10644644/

相关文章:

git - 浅克隆对 Travis 和其他 CI 服务的缺点?

git - 通过 https 克隆最新版本的 git 存储库

c# - 为什么 hash_pbkdf2 (PHP) 的输出与 .NET/C# 实现不同

c# - 如何在具有不同返回类型的 Linq 表达式之间进行转换?

c# - JustMock:通过示例模拟 ToString 评估

java - 如何在构造函数数组中查找复制构造函数

git - 如何使用Composer进行浅克隆?

c# - 调试 Windows 服务

c# - 有没有办法在设置类的任何属性时调用方法?

java - 使用反射修改字符串的目的是什么?