我有克隆的動態對象,像這樣的代碼有問題:克隆動態對象
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'? –