1
我創建一個通用的方法:如何在使用泛型方法時設置泛型屬性?
private void UpdateAllProperties<idType, entityType>(entityType currentEntity, entityType newEntity)
where idType : IEquatable<idType>
where entityType : AbstractEntity<idType>
{
var currentEntityProperties = currentEntity.GetType().GetProperties();
var newEntityProperties = newEntity.GetType().GetProperties();
foreach (var currentEntityProperty in currentEntityProperties)
{
foreach (var newEntityProperty in newEntityProperties)
{
if (newEntityProperty.Name == currentEntityProperty.Name)
{
if (currentEntityProperty.PropertyType == typeof(AbstractEntity<>))
{
// Here i want to use this method again, but i need to inform the types.. how can i do anything like that:
var idPropertyType = currentEntityProperty.PropertyType.GetProperty("Id").GetType();
var entityPropertyType = currentEntityProperty.PropertyType;
// Here i got the error because i cannot set through this way
this.UpdateAllProperties<idPropertyType, entityPropertyType>(currentEntityProperty.GetValue(currentEntity, null), newEntityProperty.GetValue(newEntity, null));
break;
}
else if (currentEntityProperty.PropertyType == typeof(ICollection<>))
{
// TODO
break;
}
else
{
currentEntityProperty.SetValue(currentEntity, newEntityProperty.GetValue(newEntity, null), null);
break;
}
}
}
}
}
我怎樣才能做到這一點?
我在這一行的一個問題:'VAR idPropertyType = currentEntityProperty.PropertyType.GetProperty( 「ID」)的GetType();'因爲返回類型爲'RuntimePropertyInfo' ,而不是'int'或者'decimal'(如果我已經將AbstractEntity Id的類型聲明爲int或decimal),那麼我怎樣才能得到'int'或'decimal'類型而不是'RuntimePropertyInfo' ? – 2012-03-01 14:45:09
我想你想要:'var idPropertyType = currentEntityProperty.PropertyType.GetProperty(「Id」)。PropertyType' – Jamiec 2012-03-01 14:49:41
是的,就是這樣!讓我測試一下現在是否可以完成。 – 2012-03-01 14:53:16