0

KeyValuePair 结构具有只读属性(键和值),所以我创建了一个自定义类来替换它:

public class XPair<T, U>
{
    // members
    private KeyValuePair<T, U> _pair;

    // constructors
    public XPair()
    {
        _pair = new KeyValuePair<T, U>();
    }
    public XPair(KeyValuePair<T, U> pair)
    {
        _pair = pair;
    }

    // methods
    public KeyValuePair<T, U> pair
    {
        get { return _pair; }
        set { _pair = value; }
    }
    public T key
    {
        get { return _pair.Key; }
        set { _pair = new KeyValuePair<T, U>(value, _pair.Value); }
    }
    public U value
    {
        get { return _pair.Value; }
        set { _pair = new KeyValuePair<T, U>(_pair.Key, value); }
    }
}

这个类是否有可能也适用于 Dictionary 的“foreach”用法?例子:

Dictionary<String, Object> dictionary = fillDictionaryWithData();
foreach(XPair<String, Object> pair in dictionary) {
    // do stuff here
}
4

1 回答 1

3

如果您的类从KeyValuePair<TKey, TValue>.

但它仍然不会按您期望的方式工作,因为更改pair循环内的键或值不会对dictionary. 字典中的键和值将保持不变。

如果要更改字典中的值,只需使用dictionary[key] = newValue;

如果您想更改密钥,我猜您并不是真的想要Dictionary<TKey, TValue>. 一个IEnumerable<XPair<TKey, TValue>>可能更合适。
如果你真的需要一个字典,你可以使用下面的代码来“改变”一个键:

var value = dictionary[key];
dictionary.Remove(key);
dictionary.Add(newKey, value);
于 2013-02-14T15:33:22.383 回答