2010-10-14 2 views
0

Я создал пару простых функций в VB.NET, которые просто возвращают элемент управления определенного типа, который я уже знаю, например HtmlInputHidden, Label и т. Д. Это означает, что каждый функций создается только для этого специального назначения.Общая функция VB.NET для возврата элемента управления

Что бы я хотел сделать, это объединить все эти функции в одну функцию с помощью дженериков. Обычными вещами, разделяемыми каждой из функций, являются управляющий идентификатор и тип управления.

То, что я получил до сих пор:

Public Function GetControl(Of T)(ByVal ctrlId As String) As T 
     Dim ctrl As Control = Me.FindControl(ctrlId) 

     If (Not ctrl Is Nothing) Then 
      GetControl = CType(ctrl, T) 
     Else 
      GetControl = Nothing 
     End If 
    End Function 

Но линия "GetControl = CType (Ctrl, T)" дает мне ошибку компиляции:

Value of type 'System.Web.UI.Control' cannot be converted to 'T' 

Это в. NET Framework 2.0.

Любое понимание высоко ценится.

John

ответ

2

Если вы измените свою функцию на это, она будет работать.

Public Function GetControl(Of T)(ByVal ctrlId As String) As T 
    Dim ctrl As Object = Me.FindControl(ctrlId) 

    If (Not ctrl Is Nothing) Then 
     return CType(ctrl, T) 
    Else 
     return Nothing 
    End If 
End Function 

Это связано с тем, что тип должен быть таким образом, что он может конвертировать, как если бы вы преобразовать в элемент управления, было бы приведение к базовому типу к конкретному типу.

Теперь, обязательно иметь в виду, что вы могли бы бросить исключения здесь, если ваш отправить идентификатор неправильный тип и т.д.

+0

Это все! Большое вам спасибо за быстрый ответ. – John

+0

Нет проблем! Рад, что я мог бы помочь –

+0

Может использовать TypeOf и DirectCast, чтобы избежать ошибок. –

0

Вот более краткий способ добавления - вы не можете назвать это используя тип, который не наследуется от Контроля:

Public Function GetControl(Of T As Control)(ByVal ctrlId As String) As T 
    Dim ctrl As Control = Me.FindControl(ctrlId) 

    If (Not ctrl Is Nothing) Then 
     GetControl = CType(ctrl, T) 
    Else 
     GetControl = Nothing 
    End If 
End Function 
Смежные вопросы