4

我想WebControl内联初始化对象,但是对于某些字段,这有点棘手。例如,当我尝试像这样初始化对象的Attributes属性时TextBox

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

我得到错误:

无法使用集合初始化程序初始化类型“ AttributeCollection ”,因为它没有实现“System.Collections.IEnumerable”

知道在这种情况下内联初始化如何工作吗?

4

1 回答 1

5

你可以这样做,但如果你使用 C#6。这称为索引初始化,因此请尝试以下代码,但正如我所说,这在 Visual Studio 2015 和 C#6 中应该可以正常工作:

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

旧的集合初始化器(C#6 之前)仅适用于实现IEnumerable<T>并具有Add方法的类型。但是现在任何带有索引器的类型都允许通过这种语法进行初始化。

于 2016-07-29T20:24:16.120 回答