2

変数をオブジェクトに設定し、常に前の変数と等しい別の変数を設定する方法はありますか?

var x = new object();
var y = [synonym of x];
x = null; // then y = null as well

これは存在しないと思います。

そのため、「参照」を保持するために配列をよく使用してきました。

var x = new object[] { new object() };
var y = x;
x[0] = null; // then y[0] = null as well

でもなんかダサい感じ。

4

5 に答える 5

5

本当にこれが必要な場合は、以下のようなことができますが、それでも不十分だと思います (:

class RefHolder<T>
{
    public RefHolder(T value)
    {
        Value = value;
    }

    public T Value { get; set; }
}

使用法

var o1 = new RefHolder<object>(new object());
var o2 = o1;
o2.Value = null; // now o1.Value is null too
于 2013-06-28T12:08:40.607 に答える
3

あなたはそれを行うことができますが、支払わなければならない代償は、文書化されていないキーワード/機能を使用することです. ずっと昔からあるもので、おそらく変わらない、消えることはないだろうけど…

コードが読みにくくなります (言語自体でサポートされている場合は便利かもしれません) が、双方向であり、元のオブジェクトを移動できます。変更は常に「参照」にも反映されます。元のオブジェクトを別の関数に渡すことができ、変更がシノニムにも伝播するため、Mehmet Ataş の回答とは異なりますこれらには制限があります (クラス フィールドには使用できません) が、パラメーターとローカル変数には機能します。

必要なのは です。別の変数への参照TypedReferenceを保持し、新しい値を割り当てると、元の変数が変更されます。理論的には、これが含まれるのに適した機能であると彼らが考えるようになると、同義語への扉が開かれる可能性があります。

例を見てみましょう:

var text = "initial value";
var synonym = __makeref(text);

synonymこれはテキストへの参照です (保持する値への参照ではなく、参照であることに注意してください) text。a から元の値を取得するには、次のようTypedReferenceに使用します__refvalue

Console.WriteLine(__refvalue(synonym, string));

それらは同じ値を持っています:

Debug.Assert(__refvalue(synonym, string) == text);

テキストを新しい値に変更しましょう。

text = "second value";
Debug.Assert(__refvalue(synonym, string) == text);

そしてその逆も真です:

__refvalue(synonym, string) = "third value"; // <---
Debug.Assert(__refvalue(synonym, string) == text);

最後に、別の関数内で元の変数を変更しましょう (通常の変数が表示される参照を認識していません)。

void ChangeIt(ref string value) { value = "another value"; }

ChangeIt(ref text);
Debug.Assert(__refvalue(synonym, string) == text);

このすべての作業は、同様に型を評価します。これにより、エイリアスではなく、変数の同義語が作成されることに注意してください(参照型の場合は、安全なポインター-ポインターへのポインターとして想像できます)。これを試してみましょう:

void foo1()
{
    string text = "ABC";
    foo2(text);

    // text holds the original value "ABC"
    // not the value modified in foo2
}

void foo2(string value)
{
   value = "123";
   var synonym = __makeref(value);
   __refvalue(value, string) = "456";

   // both value and synonym holds "456";
}
于 2013-06-28T12:58:42.587 に答える
-1

のように割り当てることができます

var parentObject={};

parentobject['child1']="test1";
parentobject['child2']="test2";
parentobject['child3']="test3";

console.log(parentObject);

次の出力が得られます

object{child1="test1",child2="test2",child2="test2"}

于 2013-06-28T12:19:09.463 に答える