2010-04-23 3 views
1

Я надеюсь, кто-то может помочь мне понять, что происходит в строке кода ниже:Понимание синтаксиса в C#

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

Page.FindControl("Panel1").FindControl("tbl"); Я понимаю Почему существует (таблица) до Page.FindControl?

+0

После того, как вы нашли свой контроль, что нужно где-то поставить его, не так ли? –

+0

@ Dan, thats «t» в этом синтаксисе, а не «Таблица» – user279521

ответ

10

FindControl Объявлено о возврате Control (при угадывании), тогда как вам нужно сохранить результат в переменной типа Table.

(Table) бит является литой - это в основном говорят, «Я думаю, что это будет Table Проверьте это для меня во время выполнения, а затем позвольте мне использовать его соответствующим образом.».

+0

, вы также можете увидеть безопасное литье, написав его как ... Таблица t = Страница. FindControl («Panel1»). FindControl («tbl» ") в виде таблицы; Все это делается при попытке сделать бросок, и если бросок не увенчался успехом, скажите, что его больше не таблица, а текстовое поле, оно сделает t null и не будет генерировать исключение. – jeriley

+0

@jeriley: Да, хотя я редко нахожу это полезным. Обычно, когда я пишу бросок, это потому, что если это какой-либо другой тип, это указывает на ошибку - поэтому я хочу, чтобы исключение было выбрано. –

+0

Я почти никогда не использую прямые трансляции в C#. Я нахожу «var t = ctl as Table; if (t == null) return fail(); 'будет намного чище, чем' Таблица t = null; попробуйте {t = (Таблица) ctl; } catch {return fail(); } '. –

1

Page.FindControl возвращает Control тип & так что вам нужно будет привести его к соответствующему типу управления, необходимо использовать ...

Ref .: 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; 
    } 

} 
0

FindControl возвращает тип от Control.

Таблица в вашем коде наследует Control. Путем явного указания объекта на его определенный Тип вы получаете доступ ко всем свойствам этого типа, а не только к унаследованным свойствам от Control.

Смежные вопросы