Намагаючись очистити успадковане спадщину VB.NET / ASP проект, я його повторюю, і це мені розповідає ".Помилки виконання може виникнути при перетворенні "System.Web.UI.Control" на "System.Web.UI.WebControls.Label""на цю лінію:
Dim _UserNameLabel As Label = PortalLogin.FindControl("UserNameLabel")
... але коли я погоджуюсь і дозволю йому змінити це на це:
Dim _UserNameLabel As Control = PortalLogin.FindControl("UserNameLabel")
... властивість "Стилю" тут покращується:
_UserNameLabel.Style("color") = dt1.Rows(0)("TextBoxColor")
Чи існує альтернативний спосіб забезпечити цей ярлик / контроль кольором, чим краще ігнорувати пропозицію Resharper чи що?
Відповіді:
2 для відповіді № 1Правильний варіант:
Dim _UserNameLabel = DirectCast(PortalLogin.FindControl("UserNameLabel"), Label)
The Control
посилання повернуто FindControl
викидається як тип Label
і ви можете отримати доступ до членів, специфічних для типу Label
. це є Option Infer On
що дозволяє тип UserNameLabel
змінна, яка випливає з вираження ініціалізації. З Option Infer Off
вам потрібно буде написати:
Dim _UserNameLabel As Label = DirectCast(PortalLogin.FindControl("UserNameLabel"), Label)
Деякі люди воліють це робити для чіткості. Типовий висновок часто корисний, але не обов'язковий. Де потрібно, це використання анонімних типів, що повертаються за запитами LINQ.