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" 
        }),

Intellisenseエラーが発生します:

無効な初期化メンバー宣言子

つまり、新しくインスタンス化されたオブジェクト内のすべてのオブジェクト(リストなど)がインスタンス化されていないため、新しくインスタンス化されたオブジェクト内のオブジェクトをインスタンス化できないということですか?

私はそれを考えるのは正しいですか?

乾杯

4

2 に答える 2

4

いいえ、問題はSubItems.Add()メソッドあり、プロパティ/フィールドではありません。メソッドの呼び出しは、メンバーの初期化とは大きく異なります。

そうは言っても、それが設定可能であればできるでしょうSubItems = ...が、@ RBが指摘したように、そうではありません。

于 2012-07-12T14:12:42.900 に答える
0

lcとして。指摘された、ListViewItemCollection.AddListViewSubItemCollection.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 に答える