0

説明させてください。さまざまな ASP.NET コントロールを追加するリストがあります。次に、リストをループして CssClass を設定したいと考えていますが、すべての Control がプロパティ CssClass をサポートしているわけではありません。

私がやりたいのは、基になるインスタンス タイプが CssClass プロパティをサポートして設定しているかどうかをテストすることですが、各 Control オブジェクトのタイプがわからないため、プロパティを設定する前に変換を行う方法がわかりません。

typeof または x.GetType() を使用できることはわかっていますが、これらを使用してコントロールをインスタンス型に変換し、プロパティをテストしてから設定する方法がわかりません。


実際に私はこれを解決したようですので、他の人のためにここにコードを投稿しようと思いました。

foreach (Control c in controlList) {
    PropertyInfo pi = c.GetType().GetProperty("CssClass");
    if (pi != null) pi.SetValue(c, "desired_css_class", null);
}

この 2 行のコードを調査するのに何時間も費やしたので、これが誰かの役に立てば幸いです。

乾杯

スティーブ

4

2 に答える 2

0

Preetのアドバイスに従うために、私もこれを回答として投稿しました。

foreach (Control c in controlList) {
    PropertyInfo pi = c.GetType().GetProperty("CssClass");
    if (pi != null) pi.SetValue(c, "desired_css_class", null);
}

これが将来誰かに役立つことを願っています(おそらく私が再びグーグルで検索したとき)。

于 2009-11-05T00:17:28.140 に答える
0

これらのクラスを再設計ICssControlして、CssClass プロパティを提供するラインに沿ってインターフェイスまたは何かを実装することを検討することをお勧めします。

interface ICssControl

{ string CssClass { get; 設定;} }

次に、ロジックを次のように実装できます。

string desiredCssClass = "desired_css_class";
foreach (var control in controlList)
{
    var cssObj = control as ICssControl;
    if (cssObj != null)
        cssObj.CssClass = desiredCssClass;
}

これにより、リフレクションを使用する必要がまったくなくなり、後でリファクタリングが容易になります。

編集

あなたの質問を読み直すと、おそらくあなたはすでにこのインターフェースを持っていて、それをそのインターフェースにキャストする方法を尋ねていますか?

于 2009-11-05T00:59:49.260 に答える