【问题标题】:Construct evaluation condition dynamically动态构建评估条件
【发布时间】:2013-06-28 08:57:53
【问题描述】:

我是 vb.net 的新手,需要帮助来解决这个问题:

以下来自数据库

Param1: 100
Param2: 184
Comparion Operator: >

在 vb.net - 我需要生成这样的代码:

If 100>184 Then
'Do something
Else
'Do something
End

我真的很苦恼如何在 vb.net 中生成上述代码,因为值来自数据库。

我没有尝试过任何东西,我正在努力为此编写代码。

【问题讨论】:

  • 您在寻找代码生成机制吗?或者您正在寻找一种生成代码并即时运行它的方法?以及到目前为止你做了什么?

标签: vb.net


【解决方案1】:

您必须依赖一组条件或一个 switch...case。你可以得到一些灵感here

因此,您提出的具体案例的解决方案应该是:

Private Function checkSituation(ByVal val1 As Integer, ByVal inputOperator As String, ByVal val2 As Integer) As Boolean

    Select Case inputOperator
        Case ">"
            Return val1 > val2
        Case "<"
            Return val1 < val2
        Case "="
            Return val1 = val2
    End Select

End Function

在你的情况下:

    If (checkSituation(100, ">", 184)) Then


    End If

【讨论】:

  • 我也会添加 >=、。
  • 这只是提供一些帮助的示例代码。他应该接受它并创建一个符合他确切期望的代码。他可能想要更多的东西。不过谢谢你的评论。
【解决方案2】:

我会实现一个类Comparator,它有一个方法,如果满足条件则返回true,否则返回false。我不精通 VB.NET,但我会在 C# 中尝试以下操作:

public static class Comparator
{
    public static bool Compare(int value1, int value2, string operator)
    {
        switch (operator)
        {
           case "<" : return value1 < value2;
           case "<=" : return value1 <= value2;
           case ">" : return value1 > value2;
           ...
        }
    }
}

【讨论】:

    【解决方案3】:

    试试这样的:

    Private Function EvalData(param1 As Integer, param2 As Integer, operator As String) As Boolean
        Select Case operator
            Case ">" : Return param1 > param2
            Case "<" : Return param1 < param2
            Case "=" : Return param1 = param2
            Case Else 
                Throw New ApplicationException("No matches for this operator")
        End Select
    End Function
    

    然后这样使用:

    If EvalData(param1, param2, operator) Then
        'Do something
    Else
        'Do something
    End 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2017-10-14
      • 2012-10-25
      • 2021-10-03
      • 1970-01-01
      • 2020-11-16
      • 2017-12-18
      相关资源
      最近更新 更多