C# 如何使自定义类应用于foreach用法

C# 如何使自定义类应用于foreach用法,c#,foreach,C#,Foreach,KeyValuePair结构具有只读属性(键和值),因此我创建了一个自定义类来替换它: public class XPair<T, U> { // members private KeyValuePair<T, U> _pair; // constructors public XPair() { _pair = new KeyValuePair<T, U>(); } public XPa

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); }
    }
}
公共类XPair
{
//成员
私钥值对\u对;
//建设者
公共XPair()
{
_pair=新的KeyValuePair();
}
公共XPair(KeyValuePair对)
{
_配对=配对;
}
//方法
公钥值对
{
获取{return\u pair;}
设置{u pair=value;}
}
公钥
{
获取{return\u pair.Key;}
set{u pair=newkeyvaluepair(value,_pair.value);}
}
公共价值
{
获取{return}pair.Value;}
set{u pair=newkeypaluepair(_pair.Key,value);}
}
}
这个类是否也可以应用于字典中的“foreach”用法?例如:

Dictionary<String, Object> dictionary = fillDictionaryWithData();
foreach(XPair<String, Object> pair in dictionary) {
    // do stuff here
}
Dictionary Dictionary=fillDictionaryWithData();
foreach(字典中的XPair对){
//在这里做事
}

如果您的类将实现来自
KeyValuePair
的转换运算符,则这是可能的

但是它仍然不能按您期望的方式工作,因为在循环中更改
对的键或值将不会对
字典产生任何影响。字典中的键和值将保持不变

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

如果您想更改密钥,我想您并不真正需要
字典。
IEnumerable
可能更合适。
如果您确实需要字典,可以使用以下代码“更改”键:


如果您的类将实现来自
KeyValuePair
的转换运算符,则这是可能的

但是它仍然不能按您期望的方式工作,因为在循环中更改
对的键或值将不会对
字典产生任何影响。字典中的键和值将保持不变

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

如果您想更改密钥,我想您并不真正需要
字典。
IEnumerable
可能更合适。
如果您确实需要字典,可以使用以下代码“更改”键:


为什么要覆盖键或值?您要完成什么?我会考虑更新字典,而不是尝试更新键值对。我只是想用一个更灵活的结构替换键值对结构。XPair是我一直在使用的一个结构,所以我想我也可以在“foreach”命令中使用它,而不是KeyValuePair。我想这毕竟是没有必要的。无论如何,谢谢。为什么要覆盖这些键或值?您想实现什么?我会考虑更新字典,而不是尝试更新键值对。我只是想用一个更灵活的结构替换键值对结构。XPair是我一直在使用的一个结构,所以我想我也可以在“foreach”命令中使用它,而不是KeyValuePair。我想这毕竟是没有必要的。无论如何,谢谢你。
var value = dictionary[key];
dictionary.Remove(key);
dictionary.Add(newKey, value);