1

所以我有:

ConcurrentDictionary<string, int> dict;

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

4

4 回答 4

4

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

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

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

ConcurrentDictionary<string, int> dict = new ...;
DoChangeMyElement(value => dict["X"] = value);
于 2013-04-25T15:23:21.923 回答
1

我想传递对其一个元素的引用,假设 dict["x"] 给一个方法,并允许该方法更改/设置该元素。是否可以做到这一点,或者我必须通过字典本身?

只需通过字典,正如 Sam 所说,无论如何它是一个引用类型。

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

不,那是不可能的,你必须添加它,然后将它发送到函数。

于 2013-04-25T15:19:53.927 回答
0

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

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

public class IntContainer
{
    int value;
}
于 2013-04-25T15:18:26.727 回答
0

您必须传递整个字典和密钥,然后让该方法执行所需的操作。这样做的基本原因是您只能通过引用传递字段和局部变量,而不是属性(包括索引器属性)。

如果您真的很想这样做,您可以使用反射和/或委托来完成您想要完成的事情,但这不是最好的方法。

于 2013-04-25T15:24:20.290 回答