如何将A <t>转换为A <object>?

时间:2018-05-21 13:14:04

标签: c# generics casting

我正在尝试使用字符创建模拟器,并且我使用许多泛型来处理它们的属性,无论它们的确切类型(重量,长度,时间等)如何。这样,我仍然可以比较它们或随机生成它们。

在某个类中,我想将每个字符属性与分布方法链接(例如,将年龄与正态分布链接),而不管类型如何。 字符属性和分发方法都使用泛型,因此我将其用作类型。在下面的词典中,我只希望属性和分配方法具有相同的类型。

public Dictionary<CharacterProperty<object>, PropertyDistributor<object>> properties = new Dictionary<CharacterProperty<object>, PropertyDistributor<object>>();

//example
properties.Add(new CharacterProperty<Time>(
        c => c.age,
        (c, v) => c.age = v
    ), new NormalDistribution<Time>(20 * Time.Y, 35 * Time.Y)
);

以下是使用此词典生成角色的方法示例。我创建一个空字符,然后使用分配方法生成每个属性。我不在此方法中使用类型,因为分发方法返回属性类型的对象。

Character c = new Character();
foreach(KeyValuePair<CharacterProperty<object>, PropertyDistributor<object>> v in repartitor.properties)
    v.Key.set(c, v.Value.generate());
return c;

虽然我在上面的函数中没有出现任何错误,但是当我尝试在我的dictionnary中添加一个元素时,我得到一个。

Impossible cast from CharacterProperty<Time> to CharacterProperty<object>

为什么这个演员不可能? 我该怎么做才能避免这个错误?

0 个答案:

没有答案