存储对象字符串引用

时间:2012-07-12 14:22:47

标签: c# string pointers

我认为这个问题在C#中被多次提出,但我的问题可能更容易解决 我有一个对象值作为字符串:myobject.value我想将此值存储在队列(或其他任何东西)中以便以后访问它。有可能吗?

我阅读了很多帖子,说不可能将ref存储到字符串中。 我没有看到任何解决方案将ref存储到我的字符串值myobject.value并稍后更改。

任何想法?

2 个答案:

答案 0 :(得分:3)

如果你想存储一个人们可以看到并分享变化的字符串的引用,你需要将它包装在一个类中:

public class Wrapper<T>
{
    public T Item { get; set; }
}

然后人们使用它而不是字符串:

class MyClass
{
    public Wrapped<string> SharedString { get; set; } 
}

var c1 = new MyClass();
var c2 = new MyClass();

var s = new Wrapped<string> { Item = "Hello" };

c1.SharedString = s;
c2.SharedString = s;

c1.SharedString.Item = "World";
Console.Writeline(c2.SharedString.Item);

即使字符串是引用类型,它们也是不可变的,因此更改需要“复制”。共享是这种方式不会改变不变性,它只是集中保存一个字符串的副本,每个人都通过对Wrapped<string>的引用来查看。

您可以进一步使用Wrapped<T>类,并为T提供隐式演员支持,以获得一点语法糖:

public static implicit operator T(Wrapped<T> wrapper)
{
    return wrapper.Item;
}

public static implicit operator Wrapped<T>(T item)
{
    return new Wrapped<T> { Item = item };
}

Wrapped<int> i = 2;
int j = i;

// Careful, this is a re-assignment of s, not a change of s.Item.
Wrapped<string> s = "Hello"; 

答案 1 :(得分:0)

如果我理解正确,并且myobject.valuestring,那么您肯定可以存储代表这些值的集合

List<string> strLst = new List<string>();
strLst.Add(`myobject.value`);

不,您不能将引用存储为字符串,也不必存储,但您可以创建一个字符串(或xml)来表示有关对象的所有信息(如果确实需要)。