/ / Необхідно, щоб я міняв Label для керування, щоб уникнути можливої ​​помилки виконання? - vb.net, runtime-error, resharper

Чи обов'язково змінити мітку для керування, щоб уникнути можливої ​​помилки виконання? - vb.net, runtime-error, resharper

Намагаючись очистити успадковане спадщину 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.