我認爲這個問題曾多次在C#中提出過,但我的問題可能更容易解決。
我有一個對象值作爲字符串:myobject.value
,我想將這個值存儲在一個隊列(或其他任何)來稍後訪問它。可能嗎?存儲對象字符串參考
我讀了很多帖子,說不可能將ref存儲到字符串中。 我沒有看到任何解決方案存儲ref我的字符串值myobject.value
並稍後更改。
任何想法?
我認爲這個問題曾多次在C#中提出過,但我的問題可能更容易解決。
我有一個對象值作爲字符串:myobject.value
,我想將這個值存儲在一個隊列(或其他任何)來稍後訪問它。可能嗎?存儲對象字符串參考
我讀了很多帖子,說不可能將ref存儲到字符串中。 我沒有看到任何解決方案存儲ref我的字符串值myobject.value
並稍後更改。
任何想法?
如果你想存儲到一個字符串的引用,人們可以看到並分享你的改變將需要將其包裝在一個類:
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";
如果我理解你的權利,並myobject.value
是string
,比你能當然存儲代表這些價值
List<string> strLst = new List<string>();
strLst.Add(`myobject.value`);
不,你不能存儲引用作爲一個字符串的集合,你也不應該有,但你可以做一個字符串(或XML)代表所有關於你的對象的信息,如果你真的需要的話。
http://stackoverflow.com/questions/1189271/store-a-reference-to-a-string – 2012-07-12 14:25:43
爲什麼不存儲對擁有該字符串的* object *的引用?也許你需要重新考慮你的對象,因爲此時你正在使用它們作爲公共屬性的簡單容器。 *要求對象通過方法更新字符串...對象方向和數據封裝好得多。 – Tony 2012-07-12 14:29:34