如何正确地公开列表<;对象>;属性

本文关键字:lt gt 属性 对象 列表 正确地 | 更新日期: 2023-09-27 18:21:31

我为自己制作的自定义窗口窗体创建了一个属性。

private List<object> values;
public List<object> Values
{
    get
    {
       return values;
    }
    set
    {
       values = value;
    }
}

它在设计器的属性窗口中显示得很好。我转到属性值字段和带有"…"的按钮显示了三个点。我点击按钮,就会出现一个窗口,允许我将项目添加到列表中。我添加了它们,然后单击"确定"。没有出现错误,但项目尚未保存。

我的问题是如何正确设置,以便在设计时在属性窗口中设置List<object>项?

如何正确地公开列表<;对象>;属性

在Form1.Designer.cs中,像以下一样手动实例化List

this.Values = new List<object>();

添加项目后,Form1.Designer.cs文件将按照正常方式重新创建,但上面的行将被替换

this.Values = ((System.Collections.Generic.List<object>)(resources.GetObject("$this.Values")));

或者,在声明列表时实例化它。

private List<object> values = new List<object>();
public List<object> Values
{
    get
    {
        return values;
    }
    set
    {
        values = value;
    }
 }

Thx到键盘p。我把我的代码改成了你建议的,比如

private列表<object>值=新列表<object>();

公用列表<object>值{收到{返回值;}设置{values=值;}}

它和我想要的一模一样。

如果有人需要的话,需要注意一件事。如果你使用的是像List <CustomClass>这样的自定义类,而不是List <object>。在"CustomClass"定义中执行此

[System.Serializable] public class CustomClass { ...... }

否则,当您试图通过属性窗口将项目添加到列表时,将出现错误。

另一种方法是将List <CustomClass>更改为CustomClass[]

private CustomClass[]值;

public CustomClass[]值{收到{返回值;}设置{values=值}}

第二个方法我不需要在CustomClass定义的开头添加[System.Serializable]。

我希望这对某人有所帮助。