使用集合初始化程序初始化 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 方法的类型。但是现在任何带有索引器的类型都允许通过这种语法进行初始化。