1

以下のコード行で何が起こっているのかを誰かが理解するのを手伝ってくれることを願っています:

Table t = (Table)Page.FindControl("Panel1").FindControl("tbl");

Page.FindControlPage.FindControl("Panel1").FindControl("tbl"); の前に(テーブル)があるのはなぜですか?

4

4 に答える 4

10

FindControlは(推測では:)を返すように宣言されてControlいますが、結果を型の変数に格納する必要がありますTable

この(Table)ビットはキャストです。基本的には、「これはそうなると思いますTable。実行時に確認してから、それに応じて使用させてください」と言っています。

于 2010-04-23T13:08:59.993 に答える
1

()演算子(C#リファレンス) およびキャストと型変換(C#プログラミングガイド)を参照してください。

于 2010-04-23T13:42:44.150 に答える
1

Page.FindControlタイプを返すControlので、使用する必要のある関連するタイプのコントロールにキャストする必要があります...

参照:http://msdn.microsoft.com/en-us/library/31hxzsdw.aspx

HTH。

サイドノート:

私たちにできることを願っています:

var t = Page.FindControl<Panel>("Panel1").FindControl<Table>("tbl"); 

たぶん、拡張メソッドの魔法を少し使えば、次のことができます。

public static class Extension{

  public static T FindControl<T>(this Control control, string id) 
   where T : Control{
       return control.FindControl(id) as T;
  }

}
于 2010-04-23T13:09:00.213 に答える
0

FindControlはタイプを返しますControl

コード内のテーブルはを継承しますControl。オブジェクトをその定義されたタイプに明示的にキャストすることにより、から継承されたプロパティだけでなく、そのタイプのすべてのプロパティにアクセスできますControl

于 2010-04-23T13:10:58.860 に答える