1

我希望有人可以帮助我理解下面的代码行中发生了什么:

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

我明白Page.FindControl("Panel1").FindControl("tbl"); 为什么Page.FindControl之前有一个(表)?

4

4 回答 4

10

FindControl被声明为返回Control(猜测:),而您需要将结果存储在类型的变量中Table

(Table)位是一个演员- 它基本上是在说,“我认为这将是一个Table。在执行时为我检查它,然后让我相应地使用它。”

于 2010-04-23T13:08:59.993 回答
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 回答
1

请参阅() 运算符(C# 参考)强制转换和类型转换(C# 编程指南)

于 2010-04-23T13:42:44.150 回答
0

FindControl 返回一个Control.

代码中的表继承Control. 通过将对象显式转换为其定义的类型,您可以访问该类型的所有属性,而不仅仅是从Control.

于 2010-04-23T13:10:58.860 回答