所以我有:
ConcurrentDictionary<string, int> dict;
我想传递对其中一个元素的引用,假设dict["x"]
为方法,并允许该方法更改/设置该元素。有可能做到这一点,还是我必须通过字典本身?此外,即使元素不作为字典中的键存在,是否可以这样做?或者它必须是字典中包含的有效密钥吗?
答案 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)
你必须传递整个字典和密钥,让方法做它需要的东西。其基本原因是您只能通过引用传递字段和局部变量,而不能传递属性(包括索引器属性)。
如果你真的非常渴望这样做,你可以使用反思和/或代表来获得你想要的东西,但这不是最好的方法。