2011-10-26 13 views
0

だから、ある変数が追加されると、その変数の現在の値を常に保持するリスト(または同様のデータ構造)が必要です。これは、現在(単純/擬似コードで)何が起こるかです:私はそれはintValueの新しい価値、 "6" を印刷したいとき常に現在の変数の値を保持するリスト。 C#

intValue = 5; 
intList.Add(intValue); 

Print intList[0].toString(); 

プリント "5"

intValue++; 
Print intList[0].toString(); 

それでも "5" を印刷します。

基本的に、リストにはintValueへの参照が格納されている必要があります(正しい用語であると思います)。実際の値ではありません。御時間ありがとうございます。

答えて

8

あなたの質問は、以下にかなり似ています。

How to get a list of mutable strings?

変更受け入れ答えでSortOfMutableString実装ではなくstringint値を格納するために、あなたは所望の効果を得ることができます。

また、Jon Skeet氏の回答を確認してください。このようなソリューションの結果を十分に理解するには、これは非常に重要です。

+0

ありがとう、これは私が必要としていたものです。 –

3

リストのタイプを変更して行うことはできません。 intのように動作する独自の参照型を作成する必要があります。 .netの構造体は参照型ではありませんので、必要なような動作をすることはできません。

あなたのリストに追加したintは単なるコピーであることに気づかなければなりません。ソースに行った変更はコピーには影響しません。 C#、intに代わり参照タイプのタイプであるため

3

です。あなたは

intValue = 5; 
intList.Add(intValue); 

を書くときは、変数自体への参照をintValueコピーを追加し、ではありません。必要なのは、変数intValueintListへの参照を追加することです。できることはintの値を自分のクラス(参照タイプ)にラップすることです。

+3

私はこの答えが他の答えよりもはっきりしていると思っていますが、 'ref'の使用についてのあなたのコメントは、誤解を招くものであると思います。 – Steve

+0

@スティーブオッケイ、私はC#の初心者です。そのコンセプトを誤解しています。私はそれを私の答えから取り除くべきですか? – Tobbe

+0

そうだと思います。 'の前、または何らかの方法でrefを使うことはすべて完璧でした。 – Steve

1

変数の値の代わりに参照を格納する必要があるため、ポインタを格納できます。 C#でポインタを使用するには、unsafeキーワードを使用する必要があります。

unsafe 
    { 
    int intVal=5; 
    List<IntPtr> intList = new List<IntPtr> (); 
    intList.Add (new IntPtr (&intVal)); 
    MessageBox.Show ((*((int*) (intList[0].ToPointer ()))).ToString ()); 
    intVal++; 
    MessageBox.Show ((*((int*) (intList[0].ToPointer ()))).ToString ()); 
    } 
関連する問題