C# 通过a";参考资料;到字典元素?

C# 通过a";参考资料;到字典元素?,c#,C#,因此,我: ConcurrentDictionary<string, int> dict; concurrentdirectionary-dict; 我想将对其中一个元素的引用传递给一个方法,假设dict[“x”],并允许该方法更改/设置该元素。到底有没有可能做到这一点,还是我必须把字典本身传过去?此外,即使元素在字典中不作为键存在,也可以这样做吗?或者它必须是字典中包含的有效密钥吗?传递整个字典也没有坏处。毕竟,它本身就是一种引用类型,传递字典比传递引用更好 但我想你可以封装i

因此,我:

ConcurrentDictionary<string, int> dict;
concurrentdirectionary-dict;

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

传递整个
字典也没有坏处。毕竟,它本身就是一种引用类型,传递
字典
比传递引用更好

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

public class IntContainer
{
    int value;
}

把整本
字典
传过去没有什么害处。毕竟,它本身就是一种引用类型,传递
字典
比传递引用更好

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

public class IntContainer
{
    int value;
}
我想传递对其中一个元素的引用,假设dict[“x”]是一个方法,并允许该方法更改/设置该元素。有没有可能做到这一点,或者我必须把字典本身递给你

只要把字典递给我就行了,因为山姆,我听说它是一种引用类型

此外,即使元素在字典中不作为键存在,也可以这样做吗

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

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

只要把字典递给我就行了,因为山姆,我听说它是一种引用类型

此外,即使元素在字典中不作为键存在,也可以这样做吗


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

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

void DoChangeMyElement<T>(Action<T> changeIt)
{
    changeIt(123);
}
void DoChangeMyElement(操作更改IT)
{
changeIt(123);
}
您可以使用以下命令调用此方法:

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

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

void DoChangeMyElement<T>(Action<T> changeIt)
{
    changeIt(123);
}
void DoChangeMyElement(操作更改IT)
{
changeIt(123);
}
您可以使用以下命令调用此方法:

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

您必须传递整个字典和键,并让该方法执行它需要的操作。其基本原因是,只能通过引用传递字段和局部变量,而不能传递属性(包括索引器属性)


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

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


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

你可以试试看是否可行。我试过了,只有在我做dict[“x”]时,它才会传递值,并且更改不会反映回字典。您可以尝试一下,看看是否可能。我尝试过,它只在我执行dict[“x”]时传递值,并且更改不会反映回字典。非常感谢。我认为这是最安全的方法。问题是,该方法位于另一台远程计算机控制的线程中,因此将字典作为一个整体传递会增加另一方读取甚至更改其所有键的风险,而它应该只能编辑特定的键值。@xander如果你这样做,那就完全是另一种动物了。通过网络传递引用甚至没有意义。使用
ref
关键字在这里没有帮助。字典索引器的结果不是变量,因此不能通过引用传递它。唯一的选择是传递整个字典,或者创建一个新的对象,其中包含对字典和键的引用并传递它。在这种情况下,我希望我在grace之前仍能进行编辑period@Sam非常感谢你的建议。我最终创建了一个委托,线程会调用它来更改特定的值。我认为这不是“最佳”方法,但谢天谢地,它工作得很好。我认为,您的方法也可以很好地工作,只需要有一个新的对象来保存对特定值的引用即可进行更改,因为正如Servy所说,它不能传递字典索引器。我不是通过网络发送参考,而是发送到负责处理与特定对等方的连接的内部线程。非常感谢。我认为这是最安全的方法。问题是,该方法位于另一台远程计算机控制的线程中,因此将字典作为一个整体传递会增加另一方读取甚至更改其所有键的风险,而它应该只能编辑特定的键值。@xander如果你这样做,那就完全是另一种动物了。通过网络传递引用甚至没有意义。使用
ref
关键字在这里没有帮助。字典索引器的结果不是变量,因此不能通过引用传递它。唯一的选择是传递整个dictionary,或者创建一个包含对dictionary和key的引用的新对象