嗨,我有一个带有通用列表的复杂类,我需要检查两个类的区别
这是我的课程
public partial class Contatto
{
[DataMember]
public int? Id { get; set; }
private int? tyContatto { get; set; }
[DataMember]
public DContatto DContatto { get; set; }
[DataMember]
public string Cognome { get; set; }
[DataMember]
public string Nome { get; set; }
[DataMember]
public string RagioneSociale { get; set; }
private int? tySesso{get; set;}
[DataMember]
public DSesso DSesso { get; set; }
[DataMember]
public DateTime TsValidita { get; set; }
[DataMember]
public DateTime DtNascita { get; set; }
private int? idComune { get; set; }
[DataMember]
public Comune Comune { get; set; }
[DataMember]
public string CdFiscale { get; set; }
[DataMember]
public string PartitaIva { get; set; }
private int? tyIso { get; set; }
[DataMember]
public DIso DIso { get; set; }
[DataMember]
public int? IdUser { get; set; }
[DataMember]
public string UserId { get; set; }
[DataMember]
public List<Telefono> LsTelefono { get; set; }
[DataMember]
public List<Mail> LsMail { get; set; }
[DataMember]
public List<Indirizzo> LsIndirizzo { get; set; }
}
这是我的递归方法
private static object CheckRecursivelyDifference(object old, object nuevo)
{
var oType = old.GetType();
foreach (var oProperty in oType.GetProperties())
{
var oOldValue = oProperty.GetValue(old, null); //letto dal SqlServer
var oNewValue = oProperty.GetValue(nuevo, null); //letto dal gestionale
if (oProperty.PropertyType.Module.ScopeName != "CommonLanguageRuntimeLibrary")
CheckRecursivelyDifference(oOldValue, oNewValue);
else
{
// this will handle the scenario where either value is null
if (!object.Equals(oOldValue, oNewValue))
{
if (oNewValue == null && oOldValue != null) //vince sempre il vecchio gestionale
oProperty.SetValue(nuevo, oOldValue);
}
}
}
return nuevo;
}
该方法适用于普通类,但是当读取System.Collection.Generic.List <>属性时不起作用
我的问题是如何检查System.Collection.Generic.List <>和继承属性。
预先感谢您的帮助
答案 0 :(得分:0)
对于列表对象,您可以做的就是检查它们是否确实是列表,
public static bool IsGenericList(object value)
{
if (value == null)
return false;
try
{
var val = value as IList;
if (val == null)
return false;
if ((typeof(BaseConversion)).IsAssignableFrom(val.GetType().GetGenericArguments()[0]))
{
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}
还排除了索引参数,例如this [“ test”]等
objType.GetProperties().Where(x => x.GetIndexParameters().Length == 0
在您的
oType.GetProperties()中的o oProperty
行。