【问题标题】:Add lambda to predicate - VB.NET将 lambda 添加到谓词 - VB.NET
【发布时间】:2020-05-14 10:23:13
【问题描述】:

我有上面的代码:

if (i=0)
 pred = (Function(d) d.n_pratica = n_pratica)
else
 pred = (Function(d) d.n_polizza = n_polizza)

我需要将另一个 lambda 表达式添加到刚刚存在的表达式中:

(Function(d) d.n_anagrafico = n_anagrafico) //这个函数在另一个if语句中,所以我不能直接把它加到之前写的语句中。

所以if i=0 结果需要是

 pred = (Function(d) d.n_pratica = n_pratica andalso d.n_anagrafico = n_anagrafico) 

else

 pred = (Function(d) d.n_polizza= n_polizza andalso d.n_anagrafico = n_anagrafico) 

“Pred”是Func (of object , boolean)

谢谢

【问题讨论】:

  • pred 绝对不是Func(Of Object , Boolean)。你能发布一个合适的对象模型吗?
  • 为什么不应该?我将它声明为 Func(Of Object , Boolean) 并且语句 (Function(d) d.n_pratica = n_pratica) 返回我这个类型。
  • n_pratica 不是Object 的属性/字段,所以它不可能是Func(Of Object, Boolean)。你有Option Strict On吗?

标签: vb.net lambda predicate


【解决方案1】:

这段代码应该会有所帮助:

Sub Main

    Dim n_pratica As String = "Foo"
    Dim n_anagrafico As String = "Bar"

    Dim pred As Func(Of SomeClass, Boolean) = Function (d) d.n_pratica = n_pratica

    Dim pred_original = pred

    pred = Function (d) pred_original(d) AndAlso d.n_anagrafico = n_anagrafico

    Dim sc = New SomeClass()
    sc.n_pratica = n_pratica
    sc.n_anagrafico = n_anagrafico

    Console.WriteLine(pred(sc))

    sc.n_pratica = "Qaz"

    Console.WriteLine(pred(sc))

End Sub

Public Class SomeClass
    Public n_pratica As String
    Public n_anagrafico As String
End Class

它输出True,然后是False

作为忠告 - 请确保您的所有 VB 编码始终使用 Option Strict On

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2010-09-26
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多