2015-11-06 5 views
0

У меня есть один метод, как,Как сравнить унаследованный тип с базовым типом?

public function DoSomethingGenricWithUIControls(ByVal incomingData As Object) 
    //Fun Stuff 
End Function 

Этот метод будет вызываться и может получить вынесший Page, UserControl, или любого другого типа.

Я хочу проверить тип входящего объекта, если это Page, UserControl или другого типа.

Но я не смог этого сделать. Всякий раз, когда я пытался использовать GetType() из typeOf() на System.Web.UI.UserControl. Это дает,

'UserControl' is a type in 'UI' and cannot be used as an expression. 

Когда я пробовал другие методы, как .IsAssignableFrom() и .IsSubclassOf(), но я все еще не в состоянии сделать это.

Еще одно примечание: мои входящие usercontrols или page могут быть несколько унаследованы от разных элементов управления/страниц. Поэтому его ближайший базовый тип не относится к System.Web.UI.<Type>.

Сообщите мне, если у вас возникла путаница. VB/C# любой способ будет работать для меня.

UPDATE

Я попытался, как,

if(ncomingPage.GetType() Is System.Web.UI.UserControl) 

Это дает мне такой же вопрос, как и выше,

'UserControl' is a type in 'UI' and cannot be used as an expression. 
+0

Вы можете проверить тип с помощью ['is'] (https://msdn.microsoft.com/en-us/library/scekt9xw.aspx) или просто ** попробуйте ** для перевода с помощью' 'as' '(https://msdn.microsoft .com/en-us/library/cscsdfbt.aspx), и если это не 'null' - тогда вам понадобится экземпляр типа. – Sinatr

+0

Я не хочу попадать в кастинг 'try catch', это не очень хорошая практика, и я попытался с' Is', но все тот же вопрос –

+0

Вам не нужно 'try/catch' при использовании' as/null' [проверка] (http://stackoverflow.com/a/2139818/1997232). Можете ли вы опубликовать неработающий код с 'is'? – Sinatr

ответ

2

Вместо

if(ncomingPage.GetType() is System.Web.UI.UserControl) 

вы должны использовать

// c# 
if(ncomingPage is System.Web.UI.UserControl) 
// vb.net fist line of code in my life ever! hopefully will compile 
If TypeOf ncomingPage Is System.Web.UI.UserControl Then 

Уведомление отсутствие проникающего типа объекта. is делает это для вас под копытом.

Вы можете проверить тип с простым рисунком as/null проверки:

var page = ncomgingPage as UserControl; 
if(page != null) 
{ 
    ... // ncomingPage is inherited from UserControl 
} 

является более эффективным (только одного литой), чем при использовании is, как вы, вероятно, сделать что-то вроде

// checking type 
if(ncomingPage is System.Web.UI.UserControl) 
{ 
    // casting 
    ((UserControl)ncomingPage).SomeMethod(); 
    ... 
} 
+0

Когда я делаю 'If (incomingPage Is System.Web.UI.UserControl) Тогда' он все еще дает ошибку '' UserControl 'является типом в' UI 'и не может использоваться как выражение. ' –

+0

Мой ответ в '' C#. Это похоже на vb.net ['Is'] (https://msdn.microsoft.com/en-us/library/kb136x1y.aspx) * is * [different] (http://stackoverflow.com/q/3167479/1997232), правое выражение должно быть объектом. См. Edit (часть vb.net, где я пытаюсь использовать 'TypeOf'). – Sinatr

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