繁体   English   中英

字典中用于映射的泛型

[英]Generics in a dictionary used for mapping

我正在尝试做某事,那可能完全是倒退。 我不知道我是否迷惑了自己,只是需要朝着正确的方向踢球,还是我需要重新考虑一切。

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

第一步只是一个简单的字典,它将一个属性名称映射到另一个属性名称。 但是对于下一个版本,我还需要进行一些转换。 所以我想我会稍微扩大地图。

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

我的问题是,如果它是布尔型属性,我想让Func接受布尔值作为输入;如果它是字符串型属性,则希望使用字符串。等等。例如:

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内的函数,但这并不是很好。

我是否完全迷惑了自己,还是有其他方法使用?

谢谢

您需要使类通用,然后使包含非通用基本类型的字典成为可能:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM