4

What am I missing here? I expected the following to work just fine:

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 });

Instead I get an error at the { character on each of the last three lines:

Cannot initialize type 'xxx.yyy.ProposalFileInfo' with a collection initializer because it does not implement 'System.Collections.IEnumerable'

Am I not using an Object initializer? Why does it assume a collection initializer? (I'm using Visual Studio 2012.)

0

1 Answer 1

8

To use an object initializer you have to specify which properties you want to set:

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

So converting your whole initialization into a collection initializer, we end up with:

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

However, you could make your code simpler by simply adding a constructor to ProposalFileInfo:

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

Then your initialization can just be:

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

If you feel you want to specify what each argument means (or some of them), and you're using C# 4, you can use named arguments, e.g.

    new ProposalFileInfo(1, isSupportDocument: false),
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.