我正在尝试使用字符创建模拟器,并且我使用许多泛型来处理它们的属性,无论它们的确切类型(重量,长度,时间等)如何。这样,我仍然可以比较它们或随机生成它们。
在某个类中,我想将每个字符属性与分布方法链接(例如,将年龄与正态分布链接),而不管类型如何。 字符属性和分发方法都使用泛型,因此我将其用作类型。在下面的词典中,我只希望属性和分配方法具有相同的类型。
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>
为什么这个演员不可能? 我该怎么做才能避免这个错误?