我有以下定义。
public delegate T MyMethod<K, T>(K data);
public static MyMethod<K, T> CreatePropertyGetter<K, T>(PropertyInfo property)
{
MethodInfo mi = property.DeclaringType.GetMethod("get_" + property.Name);
return (MyMethod<K, T>)Delegate.CreateDelegate(typeof(MyMethod<K, T>), mi);
}
T可以是十进制数、字符串、日期时间或整数
我有一些初始化代码,将基于对象的反射属性创建MyMethod委托,如下所示:
foreach (PropertyInfo property in entityType.GetProperties())
{
switch (property.PropertyType.Name)
{
case "System.Decimal":
return CreatePropertyGetter<T, decimal>(property);
case "System.DateTime":
return CreatePropertyGetter<T, DateTime>(property);
case "System.String":
return CreatePropertyGetter<T, DateTime>(property);
}
}
有没有更好的方法来创建属性getter?
- 以硬编码为字符串的方式枚举支持的属性类型?
编辑:
我的担忧是性能,因为这些委托将经常被调用(滴答声场景),所以任何强制转换都会减慢速度。虽然更优雅的解决方案是可取的,但性能仍然是我的主要关注点。
我在Code Review上发布了相同的问题,所以我会将其标记为已解决,考虑到那里的回应。