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 回答