2012-09-27 19 views
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 }); 

相反,我得到的{字符錯誤在每個最後三行:

無法初始化類型「xxx.yyy.ProposalFileInfo」與一個集合初始值設定項,因爲它沒有實現'System.Collections.IEnumerable'

我沒有使用Object initializer?爲什麼它假定一個集合初始值設定項? (我使用Visual Studio 2012)

回答

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), 
+0

D'哦!謝謝。 (這是快速的。) –

+0

@JonathanWood:參見編輯更多的建議。 –