2016-07-27 9 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

あなたの質問は[this one](http://stackoverflow.com/questions/30668572/htmlgenericcontrol-attributes-in-object-initializer)と似ていますが、受け入れ可能な回答では不可能と言われています。 –

答えて

4

これはC#6を使用している場合でも実行できます。これは、その次のコードを試してみてくださいインデックス初期化と呼ばれるが、私はこれは、Visual Studio 2015とC#6で正常に動作しなければならないと述べたとされています

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

古いコレクション初期化子(前のC#6まで)のみがIEnumerable<T>を実装し、Addメソッドを持つ型で動作します。しかし、インデクサーを持つタイプなら、この構文で初期化することができます。

関連する問題