Pokúšam sa očistiť zdedený dedičský projekt VB.NET / ASP, rozmaznávam ho a hovorí mi:Runtime chyby sa môžu vyskytnúť pri konverzii "System.Web.UI.Control" na "System.Web.UI.WebControls.Label""na tomto riadku:
Dim _UserNameLabel As Label = PortalLogin.FindControl("UserNameLabel")
... ale keď to nechávam a nechám to zmeniť:
Dim _UserNameLabel As Control = PortalLogin.FindControl("UserNameLabel")
... Vlastnosť "Štýl" tu červená:
_UserNameLabel.Style("color") = dt1.Rows(0)("TextBoxColor")
Existuje alternatívny spôsob, ako dodať, že štítok / kontrola farby, som lepšie ignorovať Resharper návrh, alebo čo?
odpovede:
2 pre odpoveď č. 1Správna možnosť je:
Dim _UserNameLabel = DirectCast(PortalLogin.FindControl("UserNameLabel"), Label)
Na Control
Vráti odkaz FindControl
je odliata ako typ Label
a potom môžete pristupovať členov konkrétne s typom Label
, to je Option Infer On
typ, ktorý umožňuje UserNameLabel
premenná nemožno vyvodiť z jeho Inicializácia výrazu. S Option Infer Off
budete musieť napísať:
Dim _UserNameLabel As Label = DirectCast(PortalLogin.FindControl("UserNameLabel"), Label)
Niektorí ľudia radšej to vlastne, pre prehľadnosť. Type inference je často šikovný ale nevyžaduje.Kde je to potrebné je používať anonymné typy vrátené dotazy LINQ.