我经常面临这一问题: 我有一个字典,钥匙是一些简单的数字识别器,其价值是标的。 身份证还载于该价值物体的具体财产。
之后,我希望能够使一些(原样的)XML脱轨,例如:
<listitem>
<id>20359</id>
<someotherval>foo</someotherval>
</listitem>
<listitem>
...
这就要求我用<代码>List<V>进行脱硫,并且不必人工将这一条改为<代码>。 Dictionary<K,V>。
第二个问题是具有约束力的。 具有约束力的清单要求来文方执行<条码> 散列<>条码>(如果我记得正确的话),并且再次令来文提交人不得不人工制作一个新的<条码>;List<V>,并将其从<条码>中填入。 Dictionary<K,V>。
我目前的、公正但实用的解决办法是:
public abstract class Keyed<KeyType>
{
public KeyType key { get; set; }
}
public class KeyedDictionary<KeyType, ValueType> :
Dictionary<KeyType, ValueType>
where ValueType : Keyed<KeyType>
{
// ...
}
public class KeyedList<KeyType, ValueType> :
IList<ValueType>,
System.Collections.IList
where ValueType : Keyed<KeyType>
{
public readonly KeyedDictionary<KeyType, ValueType> dict =
new KeyedDictionary<KeyType, ValueType>();
// ...
}
这一工作在内部进行,但规模不大。 是否有更好的办法?
EDIT:这里是我即将解决的解决办法。
public interface IKeyed<KeyType>
{
KeyType Key { get; }
}
public class KeyedList<KeyType, ValueType> :
KeyedCollection<KeyType, ValueType>
where ValueType : IKeyed<KeyType>
{
protected override KeyType GetKeyForItem(ValueType item) { return item.Key; }
}