C#类型铸造或转换

时间:2013-02-17 23:27:44

标签: types casting

public class ExpiringDictionary<TKey, TValue> : IDictionary<TKey, TValue> {
    private class ExpiringValueHolder<T>
    {
        public T Value { get; set; }
        .
        .
        .
    }
    private IDictionary<TKey, ExpiringValueHolder<TValue>> innerDictionary;

    public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
    {
        //throw new NotImplementedException();
        return (IEnumerator<KeyValuePair<TKey, TValue>>)innerDictionary.GetEnumerator();
    } 
}

这是代码给我的投射错误。是否可以为函数GetEnumerator()生成返回值?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的innerDictionary包含KeyValuePair<TKey, ExpiringValueholder<TValue>>的集合,所以不是您目前正在尝试的方式。

最简单的解决方案可能是执行以下操作:

return innerDictionary.Select(kvp => new KeyValuePair<TKey, TValue>(kvp.Key, kvp.Value.Value))
    .GetEnumerator()

这会从Value中选择内部ExpiringValueHolder<T>