4

ここで何が欠けていますか?私は次のことがうまくいくと思っていました:

public class ProposalFileInfo
{
    public int FileId { get; set; }
    public bool IsSupportDocument { get; set; }
}

// ...

var attachments = new List<ProposalFileInfo>();

attachments.Add(new ProposalFileInfo { 1, false });
attachments.Add(new ProposalFileInfo { 2, false });
attachments.Add(new ProposalFileInfo { 3, false });

代わりに{、最後の 3 行のそれぞれの文字でエラーが発生します。

タイプ 'xxx.yyy.ProposalFileInfo' は、'System.Collections.IEnumerable' を実装していないため、コレクション初期化子で初期化できません

オブジェクト初期化子を使用していませんか? なぜコレクション初期化子を想定するのですか? (Visual Studio 2012 を使用しています。)

4

1 に答える 1

8

オブジェクト初期化子を使用するには、設定するプロパティを指定する必要があります。

attachments.Add(new ProposalFileInfo { FileId = 1, IsSupportDocument = false });

したがって、初期化全体をコレクション初期化子に変換すると、次のようになります。

var attachments = new List<ProposalFileInfo>
{
    new ProposalFileInfo { FileId = 1, IsSupportDocument = false },
    new ProposalFileInfo { FileId = 2, IsSupportDocument = false },
    new ProposalFileInfo { FileId = 3, IsSupportDocument = false },
};

ProposalFileInfoただし、コンストラクターを:に追加するだけで、コードを単純化できます。

public ProposalFileInfo(int fileId, bool isSupportDocument)
{
    FileId = fileId;
    IsSupportDocument = isSupportDocument;
}

次に、初期化は次のようになります。

var attachments = new List<ProposalFileInfo>
{
    new ProposalFileInfo(1, false),
    new ProposalFileInfo(2, false),
    new ProposalFileInfo(3, false)
};

各引数(またはそれらの一部)の意味を指定する必要があり、C#4を使用している場合は、名前付き引数を使用できます。

    new ProposalFileInfo(1, isSupportDocument: false),
于 2012-09-27T21:14:59.433 に答える