0

私が知りたかったのは、変数の値を変更するとリストも変更されるように、リストに新しいメンバーを追加する方法です。

例えば:

int a=4;

list<int> l=new list<int>();

l.Add(a);

a=5;

foreach(var v in l)
  Console.WriteLine("a="+v);

出力: a=4

ありがとう

4

4 に答える 4

2

それを実現したい場合は、参照型を使用する必要があります。

などの値型を使用すると、参照のコピーではなく、リスト内の変数のコピーintを取得します。

MSDNの値型と参照型を参照してください。

于 2013-03-03T17:38:18.063 に答える
2

これは、値型変数のリストでは機能しません。値型変数を変更するたびに、スタックに新しい変数値のコピーが取得されます。したがって、解決策は、ある種の参照型ラッパーを使用することです。

class NumericWrapper
{
    public int Value { get; set; }
}

var items = new List<NumericWrapper>();
var item = new NumericWrapper { Value = 10 };
items.Add(item);

// should be 11 after this line of code
item.Value++;
于 2013-03-03T17:38:52.123 に答える
1

ラッパー コンテナーを作成し、必要に応じてラッパーの値を更新するだけです。たとえば、次のようなものです。

 //item class
 public class Item<T>
    {
      T Value {get;set;}
    }

    //usage example
    private List<String> items = new List<string>();

    public void AddItem( Item<string> item)
    {
        items.Add(item);
    }

    public void SetItem(Item<T> item,string value)
    {
      item.Value=value;
    }
于 2013-03-03T17:41:16.173 に答える
0

intを参照型の中にラップする必要があります。

これを試して:

internal class Program
    {
        private static void Main(string[] args)
        {
            IntWrapper a = 4;

            var list = new List<IntWrapper>();

            list.Add(a);

            a.Value = 5;
            //a = 5; //Dont do this. This will assign a new reference to a. Hence changes will not reflect inside list.

            foreach (var v in list)
                Console.WriteLine("a=" + v);
        }
    }

    public class IntWrapper
    {
        public int Value;

        public IntWrapper()
        {

        }

        public IntWrapper(int value)
        {
            Value = value;
        }

        // User-defined conversion from IntWrapper to int
        public static implicit operator int(IntWrapper d)
        {
            return d.Value;
        }
        //  User-defined conversion from int to IntWrapper
        public static implicit operator IntWrapper(int d)
        {
            return new IntWrapper(d);
        }

        public override string ToString()
        {
            return Value.ToString();
        }
    }
于 2013-03-03T17:54:46.887 に答える