我正在尝试做一些事情,这可能完全是一种倒退。我不知道自己是否感到困惑,只需要朝着正确的方向前进,或者我需要彻底重新考虑所有事情。
我正在制作一个简单的映射器。映射器从一个对象属性映射到另一个对象属性。
首先是一个简单的词典,它将一个属性名称映射到另一个属性名称。但是对于下一个版本,我也需要进行一些转换。所以我想我会稍微扩展地图。
字典,其中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中输出值,但这并不是很好。
我是否完全混淆了自己,还是我使用了另一种方法?
由于
答案 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参数进行交互,因为你不知道它是什么类型。