【问题标题】:Using an extension method on session a variable在会话变量上使用扩展方法
【发布时间】:2013-05-25 04:44:22
【问题描述】:

我创建了以下扩展方法:

<System.Runtime.CompilerServices.Extension()> _
Public Function ToIntegerOrDefault(ByVal valueToParse As Object, Optional ByVal defaultValue As Integer = 0) As Integer
  Dim retVal As Integer = 0
  If Not Integer.TryParse(valueToParse.ToString, retVal) Then
    retVal = defaultValue
  End If
  Return retVal
End Function

我想在会话变量上使用这种扩展方法,如下所示:

ReadOnly Property NodeID As Integer
  Get
    Return Session(SessionVariables.SELECTED_NODE_ID).ToIntegerOrDefault()
  End Get
End Property

但是,在设置会话变量之前调用该方法时,会抛出 NullReferenceException 和消息 Object variable or With block variable not set.

有没有一种安全的方式以这种方式在会话变量上使用扩展方法(假设会话变量可能为空)?

【问题讨论】:

  • 您的代码看起来不错,您的会话密钥是否有效?
  • 我会先检查该值是否为空。

标签: asp.net vb.net extension-methods session-variables


【解决方案1】:

不能为object 类型(应该是另一种类型)VB.NET: impossible to use Extension method on System.Object instance 使用扩展方法。 必须导入具有扩展方法的模块,以便您可以使用:

ReadOnly Property NodeID As Integer
  Get
    Return ToIntegerOrDefaultSession(SessionVariables.SELECTED_NODE_ID))
  End Get
End Property

或者你可以重写扩展方法

<System.Runtime.CompilerServices.Extension()> _
Public Function ToIntegerOrDefault(Sess As HttpSessionState, KeyOFvalueToParse As String, Optional ByVal defaultValue As Integer = 0) As Integer
  Dim retVal As Integer = 0
  If Not Integer.TryParse(Sess(KeyOFvalueToParse).ToString, retVal) Then
    retVal = defaultValue
  End If
  Return retVal
End Function

然后调用

Session.ToIntegerOrDefault(SessionVariables.SELECTED_NODE_ID)

或者为String定义扩展方法并调用

Cstr(Session(SessionVariables.SELECTED_NODE_ID)).ToIntegerOrDefault()

【讨论】:

  • 优秀而彻底的答案。非常感谢。
【解决方案2】:

在声明 Session 时给它一个默认值。如果它是一个使用 new 关键字的列表就可以了。如果是别的东西,你必须展示它是什么。

【讨论】:

  • 如果你能提供一个如何做的例子就好了。
  • 当 OP 没有说明集合是什么时,您如何提供初始化集合的示例?就在我的脑海中,我可以想出六种不同的系列。
  • 您好。扩展方法接受一个对象,尝试将其解析为整数,然后返回解析后的值(或者如果失败,则返回可选的默认值)。没有收藏。
猜你喜欢
  • 2011-08-02
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
相关资源
最近更新 更多