この質問は C# で何度も尋ねられたと思いますが、私の問題はおそらくもっと解決可能です。
オブジェクト値を文字列として持っています:myobject.value
この値をキュー (またはその他のもの) に格納して、後でアクセスしたいと考えています。出来ますか?
文字列への参照を保存することはできないという投稿をたくさん読みました。文字列値への参照を保存し、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);
文字列は参照型ですが、不変であるため、変更を「コピー」する必要があります。このように共有しても不変性は変わらず、 への参照を介して誰もが見ている文字列の 1 つのコピーを集中的に保持するだけ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) を作成できます。