用于映射的字典中的泛型

本文关键字:泛型 字典 用于 映射 | 更新日期: 2023-09-27 18:06:21

我正在尝试做一些事情,这可能完全是一个**倒退。我不知道我是否把自己弄糊涂了,只是需要一个正确的方向,还是我需要彻底重新考虑一切。

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

首先是一个简单的Dictionary,它将一个属性名映射到另一个属性名。但是对于下一个版本,我还需要做一些转换。所以我想把地图扩展一下。

字典,其中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}};

据我所知,对于泛型我不能这样做。funs不能有不同的签名。

我当然可以有一个Func,然后在Func中强制转换值,但这不是很好。

我完全把自己弄糊涂了,还是我用了另一种方法?

谢谢

用于映射的字典中的泛型

您需要将类设置为泛型,然后创建包含非泛型基类型的字典:

interface IMyMap {
    ...
}
class MyMap<T> : IMyMap {
    public Func<T, T> Map { get; set; }
}
var dict = new Dictionary<string, IMyMap> {
    { "Open", new MyMap<bool> { ... }
};

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