0

我正在使用 c#,我知道您可以简化新对象的创建

List<String> myStrings = new List<String>() { "Hello", "GoodBye" };

我也用它来创建新的树节点

node_Clicked.Nodes.Add(new TreeNode() { Text = "New Node" });

非常有用,但是,我想将它用于列表视图,但是当我开始编写它时:

folder_listView.Items.Add(
    new ListViewItem() 
    { 
        Text = "First Col", 
        SubItems.Add(new ListViewItem.ListViewSubItem() 
        { 
            Text = "Second Col" 
        }),

我收到智能感知错误:

初始化器成员声明器无效

所以我猜这意味着您不能在新实例化的对象中实例化对象,因为并非新实例化对象中的所有对象(例如列表)都已实例化?

我这样想对吗?

干杯

4

2 回答 2

4

不,问题是SubItems.Add()方法而不是属性/字段。调用方法与初始化成员有很大不同!

也就是说,如果它是可设置的,你可以做到SubItems = ...,但正如@RB 指出的那样,它不是。

于 2012-07-12T14:12:42.900 回答
0

作为 lc。指出,ListViewItemCollection.Add并且ListViewSubItemCollection.Add是方法,因此不是普通对象/集合初始化语法的一部分。由于它不公开设置器,因此您可以通过这种方式实例化一个新项目。但是,您可以利用它的AddRange方法,并且可以将子项的构造转换为方法,因为没有适合您的构造函数重载:

public ListView folder_listView = new ListView();

public void Build()
{
    folder_listView.Items.AddRange(new ListViewItem[]
    {
        Item("First Col", 
            new ListViewItem.ListViewSubItem(){ Text = "Second Col" }
            ),
        Item("Another col", 
            new ListViewItem.ListViewSubItem(){ Text = "Another Second Col" }, 
            new ListViewItem.ListViewSubItem(){ Text = "Another Third Col" }
            )
    });
}

private static ListViewItem Item(string text, params ListViewItem.ListViewSubItem[] subItems)
{
    ListViewItem item = new ListViewItem(text);
    item.SubItems.AddRange(subItems);
    return item;
}

这只是一个例子;随意构建您希望帮助您管理正在构建的项目/子项目的哪些属性的任何类型的帮助程序 API。

于 2012-07-12T14:33:49.163 回答