0

我怎么可能做到以下几点:

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

public void Add(string str,ref object obj) {
    bag.Add(str,**ref obj**);
}

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

4

1 回答 1

4

对象已经是引用类型。访问字典中的对象将修改原始 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

在这种情况下,obj1仍然会non-null在调用 to 之后SomeMethod,并且会null在调用 to 之后SomeMethodRef

于 2012-11-24T17:57:21.250 回答