我正在尝试遍历类T,该类可能是LINQ DataContext类,也可能不是。它适用于普通类,但是当从Linq数据上下文传递数据库类时,它也会使用相关属性(如深层副本)遍历相关表。
如果它是数据库类,我将尝试获取所有“原始”字段。即它应该返回表中的所有字段。我尝试对IsPrimitive()
进行过滤,但它不会返回所有字段(例如,可能会排除可空的int32等)。我也尝试过使用BindingFlags.Public
和/或BindingFlags.Instance
之类的方法,但无济于事。
public static T MyClone<T>(T original)
{
T newObject = (T)Activator.CreateInstance(original.GetType());
foreach (var originalProp in original.GetType().GetProperties())
{
//Do something
}
尝试一下:
public static T MyClone<T>(T original)
{
T newObject = (T)Activator.CreateInstance(original.GetType());
PropertyInfo[] properties = typeof(DbContext).IsAssignableFrom(typeof(T))
? typeof(T).GetProperties().Where(p =>
!typeof(DbContext).IsAssignableFrom(p.PropertyType)
&& (!p.PropertyType.IsGenericType || !typeof(DbContext).IsAssignableFrom(p.PropertyType.GenericTypeArguments[0])))
.ToArray()
: typeof(T).GetProperties();
foreach (var originalProp in properties)
{
//Do something
}
}