我正在为 Windows CE 设备开发 ORM。我需要将属性的 getter/setter 方法缓存为委托,并在需要时调用它们以获得最佳性能。
假设我有 2 个这样定义的实体:
public class Car
{
public string Model { get; set; }
public int HP { get; set; }
}
public class Driver
{
public string Name { get; set; }
public DateTime Birthday { get; set; }
}
我需要能够为每个实体的每个属性持有 2 个代表。所以我创建了一个 AccessorDelegates 类来为每个属性保存 2 个委托:
public class AccessorDelegates<T>
{
public Action<T, object> Setter;
public Func<T, object> Getter;
public AccessorDelegates(PropertyInfo propertyInfo)
{
MethodInfo getMethod = propertyInfo.GetGetMethod();
MethodInfo setMethod = propertyInfo.GetSetMethod();
Setter = BuildSetter(setMethod, propertyInfo); // These methods are helpers
Getter = BuildGetter(getMethod, propertyInfo); // Can be ignored
}
}
现在我想将特定实体类型的每个 AccessorDelegates 添加到列表中。所以我定义了一个类:
public class EntityProperties<T>
{
public List<AccessorDelegates<T>> Properties { get; set; }
}
在我的示例 Car 和 Driver 中,我需要为每个实体类型保存这些 EntityProperties。为了简单起见,我创建了一个Dictionary<string, EntityProperties<T>>
表示实体名称的字符串:
public class Repo<T>
{
public Dictionary<string, EntityProperties<T>> EntityPropDict { get; set; }
}
这是我无法找到解决问题的地方。我想EntityProperties
为每个实体类型保留,但我必须给Repo<T>
类一个类型参数才能创建字典(因为EntityProperties<T>
需要一个类型参数)。
我需要能够在没有类型参数的情况下创建它Repo
。如何在Dictionary<string, EntityProperties<T>>
不给我的 Repo 类一个类型参数的情况下定义一个?