将指定C#代码转VB时遇‘Image是类型不能用作表达式’错误,求正确代码
解决VB中“Image是类型,不能用作表达式”的错误并转换C#代码
你遇到的这个错误是因为VB和C#的类型转换语法不一样——C#里直接用(Image)sender这种强制转换的写法,在VB里行不通,得用专门的类型转换函数。
下面是和你提供的C#代码完全一致的VB版本:
Imports System.Web.UI.WebControls ... Protected Overridable Sub CheckFavorite(sender As Object, e As EventArgs) If Session("favorite") IsNot Nothing Then If (Not String.IsNullOrEmpty(CStr(Session("favorite")))) AndAlso (CStr(Session("favorite")) = Request.RawUrl) Then Dim img As Image = DirectCast(sender, Image) img.ImageUrl = img.ImageUrl.Replace("/favoritetransparent.png", "/unfavoritetransparent.png") End If End If End Sub
关键转换点说明:
- C#的
protected virtual对应VB的Protected Overridable - C#的
(Image)sender在VB里用DirectCast(sender, Image)(比CType更高效,因为它要求类型必须匹配,适合这种明确的控件类型转换) - C#的
Session["favorite"]在VB里是Session("favorite") - 字符串判断
!string.IsNullOrEmpty对应VB的Not String.IsNullOrEmpty,同时用CStr()把Session值转成字符串,和C#的(string)Session["favorite"]等价 - 逻辑与
&&对应VB的AndAlso(短路求值,和C#的&&行为完全一致)
这样转换后的代码就能完美复现原C#代码的逻辑,也不会再出现“Image是类型,不能用作表达式”的错误啦。
内容的提问来源于stack exchange,提问作者Thaman Gurung
相关产品推荐
相关产品推荐

