Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象引用传递到数据结构中_C# - Fatal编程技术网

C# 将对象引用传递到数据结构中

C# 将对象引用传递到数据结构中,c#,C#,我怎样才能做到以下几点: OrderedDictionary<string, object> bag = new OrderedDictionary<string, object>(); public void Add(string str,ref object obj) { bag.Add(str,**ref obj**); } OrderedDictionary包=新的OrderedDictionary(); 公共void添加(字符串str,ref对象ob

我怎样才能做到以下几点:

OrderedDictionary<string, object> bag = new OrderedDictionary<string, object>();

public void Add(string str,ref object obj) {
    bag.Add(str,**ref obj**);
}
OrderedDictionary包=新的OrderedDictionary();
公共void添加(字符串str,ref对象obj){
添加(str,**参考对象**);
}

因此,每当我想访问“bag”中的特定“obj”时,它都会引用参数中传递的“obj”。

对象已经是引用类型。访问字典中的对象将修改原始obj

您拥有的是对内存中同一对象的多个引用。因此,修改、复制或类似的操作将正常工作,并在同一对象中保持不变。但是请记住,如果要将对象设置为其他对象(如null),则只会将当前引用设置为null,而不是实际对象

另一方面,ref用于将实际的引用作为参数传递,而不是内存中的对象。以此为例:

void SomeMethod(object obj)
{
    obj = null;
}

void SomeRefMethod(ref object obj)
{
    obj = null;
}
通过此调用:

object obj1 = new object();

Console.WriteLine(obj1 == null); //False

SomeMethod(obj1);
Console.WriteLine(obj1 == null); //False

SomeMethodRef(ref obj1);
Console.WriteLine(obj1 == null); //True

在这种情况下,调用
SomeMethod
后,
obj1
仍将是
非null
,调用
SomeMethodRef
后,它将是
null
,对象已经是引用类型。访问字典中的对象将修改原始obj

您拥有的是对内存中同一对象的多个引用。因此,修改、复制或类似的操作将正常工作,并在同一对象中保持不变。但是请记住,如果要将对象设置为其他对象(如null),则只会将当前引用设置为null,而不是实际对象

另一方面,ref用于将实际的引用作为参数传递,而不是内存中的对象。以此为例:

void SomeMethod(object obj)
{
    obj = null;
}

void SomeRefMethod(ref object obj)
{
    obj = null;
}
通过此调用:

object obj1 = new object();

Console.WriteLine(obj1 == null); //False

SomeMethod(obj1);
Console.WriteLine(obj1 == null); //False

SomeMethodRef(ref obj1);
Console.WriteLine(obj1 == null); //True

在这种情况下,调用
SomeMethod
后,
obj1
仍将是
非空的
,调用
SomeMethodRef
后,它将是
null
对象是引用类型。因此,如果你访问字典中的obj,你就可以访问这个对象。
ref
修饰符是一种指向变量的符号链接。但是,如果您阅读字典值,该变量可能不再存在。那么您到底想做什么呢?谢谢,有问题了,我可能需要在方法之外声明传递的对象,这样它就不会被清理。
“这样它就不会被清理”
?如果您的对象在有序字典中,垃圾收集器将不会收集它—如果这是您的意思。
对象
是引用类型。因此,如果你访问字典中的obj,你就可以访问这个对象。
ref
修饰符是一种指向变量的符号链接。但是,如果您阅读字典值,该变量可能不再存在。那么您到底想做什么呢?谢谢,有问题了,我可能需要在方法之外声明传递的对象,这样它就不会被清理。
“这样它就不会被清理”
?如果您的对象在有序字典中,垃圾收集器将不会收集它——如果这是您的意思的话。