You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:28:35