使用集合初始化程序初始化 WebControl 对象的属性 属性
Initialize the Attributes property of a WebControl object using collection initializer
我想初始化 WebControl
个内联对象,但对于某些字段来说这有点棘手。例如,当我尝试像这样初始化 TextBox
对象的 Attributes
属性 时:
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'
知道在这种情况下内联初始化如何工作吗?
你可以做到这一点,但如果你使用 C#6。这称为 index initialization 所以请尝试以下代码,但正如我所说,这在 Visual Studio 2015 和 C#6 中应该可以正常工作:
Panel panel = new Panel
{
Controls =
{
new TextBox
{
Attributes =
{
["readonly"] = "true",
["value"] = "Hi"
}
}
}
};
旧的集合初始化器(C#6 之前的)仅适用于实现 IEnumerable<T>
并具有 Add
方法的类型。但是现在任何带有索引器的类型都允许通过这种语法进行初始化。
我想初始化 WebControl
个内联对象,但对于某些字段来说这有点棘手。例如,当我尝试像这样初始化 TextBox
对象的 Attributes
属性 时:
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'
知道在这种情况下内联初始化如何工作吗?
你可以做到这一点,但如果你使用 C#6。这称为 index initialization 所以请尝试以下代码,但正如我所说,这在 Visual Studio 2015 和 C#6 中应该可以正常工作:
Panel panel = new Panel
{
Controls =
{
new TextBox
{
Attributes =
{
["readonly"] = "true",
["value"] = "Hi"
}
}
}
};
旧的集合初始化器(C#6 之前的)仅适用于实现 IEnumerable<T>
并具有 Add
方法的类型。但是现在任何带有索引器的类型都允许通过这种语法进行初始化。