2016-07-27 92 views
3

我想初始化WebControl对象,但是对于某些字段,这有点棘手。例如,当我尝试初始化一个TextBox对象的Attributes属性是这样的:使用集合初始值设定项初始化WebControl对象的属性属性

using System.Web.UI.WebControls; 
Panel panel = new Panel() { Controls = { new TextBox() { Attributes = { { "key", "value" } } } } }; 

我得到的错误:

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

任何想法,怎么可能在这种情况下,内联初始化工作?

+0

你的问题听起来像[这一个](http://stackoverflow.com/questions/30668572/htmlgenericcontrol-attributes-in-object-initializer),并接受的答案说,这是不可能的。 –

回答

4

你可以做到这一点,但如果你使用C#6。只有

Panel panel = new Panel 
{ 
    Controls = 
    { 
     new TextBox 
     { 
      Attributes = 
      { 
       ["readonly"] = "true", 
       ["value"] = "Hi" 
      } 
     } 
    } 
}; 

旧集合初始化(此前C#6):这就是所谓的指数初始化所以试试下面的代码,但正如我说这应该在Visual Studio 2015和C#6工作正常适用于执行IEnumerable<T>并且具有Add方法的类型。但是现在任何带有索引器的类型都将允许通过此语法进行初始化。