首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新对象中的All in one声明(简化)

新对象中的All in one声明(简化)
EN

Stack Overflow用户
提问于 2012-07-12 22:08:02
回答 2查看 175关注 0票数 0

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

代码语言:javascript
复制
List<String> myStrings = new List<String>() { "Hello", "GoodBye" };

我还使用它来创建新的树节点。

代码语言:javascript
复制
node_Clicked.Nodes.Add(new TreeNode() { Text = "New Node" });

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

代码语言:javascript
复制
folder_listView.Items.Add(
    new ListViewItem() 
    { 
        Text = "First Col", 
        SubItems.Add(new ListViewItem.ListViewSubItem() 
        { 
            Text = "Second Col" 
        }),

我收到Intellisense错误:

初始值设定项成员声明符无效

所以我猜这意味着你不能在新实例化的对象中实例化对象,因为不是新实例化对象中的所有对象(比如列表)都被实例化了?

我这样想对吗?

干杯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-12 22:12:43

不,问题是SubItems.Add()是一个方法,而不是一个属性/字段。调用一个方法和初始化一个成员是非常不同的!

也就是说,如果它是可设置的,你就可以执行SubItems = ...,但正如@RB所指出的,它不是。

票数 4
EN

Stack Overflow用户

发布于 2012-07-12 22:33:49

作为lc。需要指出的是,ListViewItemCollection.AddListViewSubItemCollection.Add是方法,因此不是常规对象/集合初始化器语法的一部分。因为它不公开setter,所以你可以这样实例化一个新的项目。但是,您可以利用它的AddRange方法,并且可以将子项的构造转换为一个方法,因为没有适合您的构造函数重载:

代码语言:javascript
复制
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;
}

这只是一个示例;您可以随意构建任何类型的helper API,以帮助您管理正在构建的项/子项的属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11453664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档