/ /可能なランタイムエラーを回避するために、LabelをControlに変更することは必須ですか? - vb.net、ランタイムエラー、resharper

実行時エラーの可能性を避けるために、LabelをControlに変更することが不可欠ですか? - vb.net、ランタイムエラー、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の提案を無視する方が良いでしょうか?

回答:

回答№1は2

正しいオプションは次のとおりです。

Dim _UserNameLabel = DirectCast(PortalLogin.FindControl("UserNameLabel"), Label)

Control 戻り値: FindControl 型としてキャストされる Label タイプに固有のメンバーにアクセスできます Label。それは Option Infer On これは、 UserNameLabel 初期化式から推定される変数。と Option Infer Off あなたは次のように書く必要があります:

Dim _UserNameLabel As Label = DirectCast(PortalLogin.FindControl("UserNameLabel"), Label)

明快にするために、とにかくやりたい人もいます。型推論はしばしば便利ですが、必須ではありません。 LINQクエリによって返される匿名型を使用する必要がある場所です。