用于映射的字典中的泛型

时间:2014-06-01 20:03:11

标签: c# generics mapping

我正在尝试做一些事情,这可能完全是一种倒退。我不知道自己是否感到困惑,只需要朝着正确的方向前进,或者我需要彻底重新考虑所有事情。

我正在制作一个简单的映射器。映射器从一个对象属性映射到另一个对象属性。

首先是一个简单的词典,它将一个属性名称映射到另一个属性名称。但是对于下一个版本,我也需要进行一些转换。所以我想我会稍微扩展地图。

字典,其中MyMap是一个有两个属性的类。与上面的字符串对应的字符串,以及作为转换Func的Func。然后我的代码将查找Func,如果存在则使用它来转换值,然后将其应用于映射到的对象。

我的问题是,如果它是一个布尔属性,我想让Func将bool作为输入,如果是字符串属性,我想取一个字符串。例如:像这样的东西:

dictionary.Add("Open", new MyMap {Name = "Closed", Map = Func<bool, bool> {x => !x}};
dictionary.Add("AmountUsd", new MyMap {Name = "AmountEur", Map = Func<decimal, decimal> {x => x * conversionRate}};

就我所能收集而言,我无法用泛型做到这一点。 Funcs不能有不同的签名。

我当然可以只有一个Func,然后在Func中输出值,但这并不是很好。

我是否完全混淆了自己,还是我使用了另一种方法?

由于

1 个答案:

答案 0 :(得分:0)

您需要使该类具有通用性,然后创建包含非泛型基类型的字典:

interface IMyMap {
    ...
}
class MyMap<T> : IMyMap {
    public Func<T, T> Map { get; set; }
}

var dict = new Dictionary<string, IMyMap> {
    { "Open", new MyMap<bool> { ... }
};

显然,你将无法与字典中的type参数进行交互,因为你不知道它是什么类型。