构造函数不更新局部变量

时间:2013-05-24 11:26:50

标签: c# variables

我有以下课程:

  public class Core {
       SyncList<myItem> ITEM = new SyncList<myItem>;

       public void addSubitem(){
           subItem i = new subItem();
           i.itemType = "TYPE1"; // not updating
           ITEM[0].sItem.Add(i);
       }
  }

  public class myItem {
       public SyncList<subItem> = sItem new SyncList<subItem>();
  }

  public class subItem {

       public string itemType { get; set; }

       public subItem(){
           this.itemType = "TYPE1"; // not updating
       }
  }

这是我在主表单上定义它的方式:

public static Core core { get; set; }
core = new Core(); // assigned in form constructor

这就是我在onClick事件中的称呼方式:

core.addSubitem();

但它不会更新,并且itemType变量始终为null。我不明白为什么会发生这种情况..有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您想在项目列表中添加一个SubItem。 你不能像你想要的那样直接做到。

以下是我的建议:

 public class Core {
       public SyncList<MyItem> Items{get; private set;}

       public Core(){
            Items = new SyncList<MyItem>;
       }

       public void AddSubItem(){
            MyItem item = new MyItem();
            SubItem i = new SubItem();
            i.ItemType = "TYPE1";
            item.SubItems.Add(i);
            Items.Add(item);           
       }
  }

  public class MyItem {
       public SyncList<SubItem> SubItems {get; private set;}

       public SubItem(){
            SubItems = new SyncList<SubItem>();
       }
  }

  public class SubItem {

       public string ItemType { get; set; }
  }

然后以您的主要形式:

public static Core Core { get; set; }
Core = new Core(); // assigned in form constructor

在点击事件中,按照以下方式调用您的方法:

Core.AddSubItem();

答案 1 :(得分:1)

我不知道SyncList是什么,但我用List&lt;&gt;()尝试了你的代码。有一些问题现在有效。

namespace Test
{
    public class Core
    {
        List<MyItem> MyItemList = new List<MyItem>();

        public void AddSubitem()
        {
            SubItem sItem = new SubItem();
            sItem.ItemType = "TYPE2"; // it's updating

            MyItem mItem = new MyItem();
            this.MyItemList.Add(mItem);

            this.MyItemList[0].sItem.Add(sItem);
        }
    }

    public class MyItem
    {
        public List<SubItem> sItem = new List<SubItem>();
    }

    public class SubItem
    {
        public string ItemType { get; set; }

        public SubItem()
        {
            this.ItemType = "TYPE1"; // it's updating
        }
    }
}

在下面的代码后,ItemType的值为TYPE2。

Core core = new Core();
core.AddSubitem();