【发布时间】:2025-12-19 12:00:11
【问题描述】:
我想创建委托来访问不同对象的属性,而无需事先知道它们。
我有以下定义
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);
}
}
有没有更好的方法
- 创建属性吸气剂?
- 枚举支持的硬编码为字符串的属性类型?
编辑:
我关心的是性能,因为这些代表会被频繁调用(滴答场景),所以任何强制转换都会减慢它的速度。虽然需要更优雅的解决方案,但性能仍然是我的主要关注点
我在此处的 Code Review 上发布了相同的问题,因此考虑到there 的回复,我将其标记为已解决
【问题讨论】:
标签: c# .net generics delegates properties