在c#中,当类的列表被修改时,如何更新类的字段

本文关键字:何更新 更新 字段 列表 修改 | 更新日期: 2023-09-27 18:02:55

我理解这里的东西是值类型,而不是引用,所以当我更新列表时,字段_num不会被修改。但我的问题是如何更新字段_num当我修改包含它被修改的列表?

class Foo
{
    public List<object> mylist;
    private int _num;
    public int num
    {
        get
        {
            return _num;
        }
        set
        {
            this._num = value;
            mylist[0] = value;
        }
    }
    public Foo()
    {
        mylist = new List<object>();
        mylist.Add(_num);
    }
}

class Program
{
    static void Main(string[] args)
    {
        Foo my = new Foo();
        my.num = 12;
        my.mylist[0] = 5;
        Console.WriteLine("" + my.mylist[0] + " " + my.num);    ==> output is "5 12"
        Console.ReadLine();
    }
}

可以做哪些更改以使列表和字段同步?比如我的输出应该是" 55 "谢谢你的帮助!

在c#中,当类的列表被修改时,如何更新类的字段

这可能是你想要的,也可能不是…我仍然不确定是否需要按索引修改字段,但如果你真的想这样做,你考虑过为你的类型使用索引器吗?也就是说,索引器会像这样替换你的列表:

class Foo
{
    public int num;
    public string name;
    public bool isIt;
    public object this[int index]
    {
        get
        {
            switch(index)
            {
                case 0:
                    return num;
                case 1:
                    return name;
                case 2:
                    return isIt;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
        set
        {
            switch(index)
            {
                case 0:
                    num = (int) value;
                    break;
                case 1:
                    name = (string) value;
                    break;
                case 2:
                    isIt = (bool) value;
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
    }
}

那么你可以说:

var foo = new Foo();
foo.num = 13;  // either works
foo[0] = 13;  // either works