传递"参考"到字典元素?

时间:2013-04-25 15:16:14

标签: c#

所以我有:

ConcurrentDictionary<string, int> dict;

我想传递对其中一个元素的引用,假设dict["x"]为方法,并允许该方法更改/设置该元素。有可能做到这一点,还是我必须通过字典本身?此外,即使元素不作为字典中的键存在,是否可以这样做?或者它必须是字典中包含的有效密钥吗?

4 个答案:

答案 0 :(得分:4)

是的,通过使用代表。可以在更改函数内调用此委托。然后,委托将更改或设置字典中的键/值。

void DoChangeMyElement<T>(Action<T> changeIt)
{
    changeIt(123);
}

您可以使用以下方法调用此方法:

ConcurrentDictionary<string, int> dict = new ...;
DoChangeMyElement(value => dict["X"] = value);

答案 1 :(得分:1)

  

我想传递对其中一个元素的引用,假设dict [“x”]为方法,并允许该方法更改/设置该元素。是否有可能做到这一点,或者我必须自己传递字典?

只要传递字典,就像Sam我说它无论如何都是参考类型。

  

此外,即使元素不作为字典中的键存在,是否可以这样做?

不,这是不可能的,您必须添加它,然后将其发送到该功能。

答案 2 :(得分:0)

传递整个Dictionary没有害处。毕竟它本身就是一个引用类型,传递Dictionary会比通过引用传递更好。

但我想你可以封装你的int并像那样传递它

public class IntContainer
{
    int value;
}

答案 3 :(得分:0)

你必须传递整个字典和密钥,让方法做它需要的东西。其基本原因是您只能通过引用传递字段和局部变量,而不能传递属性(包括索引器属性)。

如果你真的非常渴望这样做,你可以使用反思和/或代表来获得你想要的东西,但这不是最好的方法。