介绍
我正在使用包含两个类的遗留代码:
- 我有一个存储其类型值的
System.Object
类。(我将这个类命名为DomainItem
)- 它的 Identifier 属性指的是保存信息类型的枚举
DomainItem
(在业务领域的上下文中)。
- 它的 Identifier 属性指的是保存信息类型的枚举
- 还有一个类将这些项目存储为可枚举列表。(
DomainItems
)
更重要的是:
- 我不想将这些类更改为泛型。这段代码非常敏感,没有被测试覆盖。
- 为了得到
DomainItem
,我必须从DomainItems.Items
收藏中得到它。
代码
类的代码等效如下:
public class DomainItem
{
public Identifier Identifier { get; set; } // Readonly in the "real" code
public object Value { get; set; }
}
public class DomainItems
{
public IEnumerable<DomainItem> Items { get; set; }
}
问题是
如何使用泛型扩展这些类,以在编译时解析 Value 属性的类型。甚至可能吗?
示例案例可能如下:
DomainItem price = new DomainItem { Value = 25.20d, Identifier = Identifier.Price };
// ....
double priceValue = price.ProperValue; // generic property of type T
显然,上面的代码是概念性的,它显示了我想要实现的目标。任何建议如何解决?甚至可能吗?
编辑
我的想法是创建一个新IEnumerable<DomainItem<T>>
的集合,其中集合由非通用DomainItem
对象填充。由于类型DomainItem.Value
是已知的,因此应该可以以某种方式进行此类收集。