我有克隆的动态对象,像这样的代码有问题:克隆动态对象
public void Execute(IPrepareData entity)
{
try
{
dynamic data = entity.Primary as dynamic;
data.PreviousInfo = deepClone(data.Info);
}
catch (Exception ex)
{
data.Errors.Add(ex.Message);
}
}
private static T deepClone<T>(T obj)
{
if (typeof(T).IsClass || typeof(T).IsArray)
{
if (ReferenceEquals(obj, null))
{
return default(T);
}
}
using (var memoryStream = new MemoryStream())
{
BinaryFormatter fieldFormatter = new BinaryFormatter();
fieldFormatter.Serialize(memoryStream, obj);
memoryStream.Position = 0;
return (T)fieldFormatter.Deserialize(memoryStream);
}
}
dynamic data;
我不知道实体的结构提前(仅它将包含的信息,和我不不知道信息的结构),它不会被标记为可序列化。我需要将此信息复制到实体的以前的信息部分。
该代码的执行结果是在fieldFormatter.Serialize行上的'Object reference not set to a instance of a object'。
我该如何检查它是否是一个对象的实例?
可能有(很可能是)循环引用,所以我没有尝试反思,因为我不知道如何处理该问题。速度也不是问题。
'data.Info'是'null'。这就是你获得例外的原因。 –
如果(ReferenceEquals(obj,null))检查那么它是如何通过的? –
有趣。什么是'typeof(T)'和'typeof(T).IsClass'? –