不得已,找了资料都搞不懂,只好上来请教大家了,关于一条C#语句转换成VB的~

时间:2022-09-08 16:38:59
                if (myList.Exists(delegate(ListItem c) { return (c.Location == strLocation); }))
                {
                    i++;
                    continue;
                }


功能:当在myList存在一个与Location属性跟strLocation一样的ListItem,就跳过外面一层循环,外面的循环就给省略了~
问题:这句C#语句是没有问题的,运行的很好,就是不知道这句话怎么转换成VB了,这个匿名代理不好玩啊,貌似有不适合VB,大伙们请帮帮忙,谢谢!
备注:请不要找那个C# Convert to VB那个工具给我转了贴上来,咱们都很聪明,请不要小看别人了...

13 个解决方案

#2


楼上的,都还2颗星星了,我怎么说你好呢~

#3


引用 2 楼 silentwins 的回复:
楼上的,都还2颗星星了,我怎么说你好呢~

可以的啊
你把代码写全了就能转换了

If myList.Exists(Function(ByVal c As ListItem) (c.Location = strLocation)) Then 
        
    i += 1 
End If 

#4


我在1楼不是说了么,你也不看看这语句能不能用...

这样转了能用的话我还跑上来问啊~~

#5


不太懂。帮你顶顶吧。

#6


当在myList存在一个ListItem,它Location属性跟strLocation一样,就跳过外面一层循环,外面的循环就给省略了~ 

是不是这个意思

VB的匿名函数 不知道怎么写?

#7



Imports System

Delegate Function ADelegate(ByVal value As Integer) As Boolean

Class AClass

    Sub Method1()
        Dim anonymousMethod As ADelegate = Function(ByVal value As Integer) value > 5
        Method2(anonymousMethod)
    End Sub

    Sub Method2(ByVal anonymousMethod As ADelegate)
        anonymousMethod(10)
    End Sub

End Class

#8


VB 不会帮顶

#9


to bossma:

Dim anonymousMethod As ADelegate = Function(ByVal value As Integer) value > 5


这句的Function在.net framework 2.0会出现Expression expected错误。
我不太懂VB.net的语法,多多包涵!

#10


vb没有匿名方法,偏偏你用的又不是.net framework 3.5,不能用lambda表达式,那就只能这样了:

    Sub SomeMethod()
        '某些操作之后
        If myList.Exists(New Predicate(Of ListItem)(AddressOf MyListPredicate)) Then
            i += 1
            Continue For
        End If
        '继续某些操作
    End Sub

    Public Function MyListPredicate(ByVal c As ListItem) As Boolean
        Return c.Location = strLocation
    End Function

#11


to ojlovecd

谢谢!你的方法可用~!
不过把断言移出去之后,strLocation的值就无效了,当然可以把strLocation设置成一个全局静态的变量来解决这个问题,但是这样做好像不严谨,不知道能不能把局部变量strLocation作为参数传递到断言函数里面呢?我自己试了几试都没弄出来~~没有办法也没有关系啦,纯属讨论一下,呵呵~!

再次感激!

#12


引用 11 楼 silentwins 的回复:
to ojlovecd

谢谢!你的方法可用~!
不过把断言移出去之后,strLocation的值就无效了,当然可以把strLocation设置成一个全局静态的变量来解决这个问题,但是这样做好像不严谨,不知道能不能把局部变量strLocation作为参数传递到断言函数里面呢?我自己试了几试都没弄出来~~没有办法也没有关系啦,纯属讨论一下,呵呵~!

再次感激!

呵呵,我就知道这个strLocation的问题肯定会暴露出来的,其实在回你的帖子之前我也有考虑过该怎样把局部变量传到断言方法里,但也没找到合适的方法,毕竟vb.net没有匿名方法,用lambda表达式倒是可以,但.net 2.0不支持,so,我也没办法了,看看有没有高人能解决吧~~~

#13


明白,谢谢^_^!

#1


#2


楼上的,都还2颗星星了,我怎么说你好呢~

#3


引用 2 楼 silentwins 的回复:
楼上的,都还2颗星星了,我怎么说你好呢~

可以的啊
你把代码写全了就能转换了

If myList.Exists(Function(ByVal c As ListItem) (c.Location = strLocation)) Then 
        
    i += 1 
End If 

#4


我在1楼不是说了么,你也不看看这语句能不能用...

这样转了能用的话我还跑上来问啊~~

#5


不太懂。帮你顶顶吧。

#6


当在myList存在一个ListItem,它Location属性跟strLocation一样,就跳过外面一层循环,外面的循环就给省略了~ 

是不是这个意思

VB的匿名函数 不知道怎么写?

#7



Imports System

Delegate Function ADelegate(ByVal value As Integer) As Boolean

Class AClass

    Sub Method1()
        Dim anonymousMethod As ADelegate = Function(ByVal value As Integer) value > 5
        Method2(anonymousMethod)
    End Sub

    Sub Method2(ByVal anonymousMethod As ADelegate)
        anonymousMethod(10)
    End Sub

End Class

#8


VB 不会帮顶

#9


to bossma:

Dim anonymousMethod As ADelegate = Function(ByVal value As Integer) value > 5


这句的Function在.net framework 2.0会出现Expression expected错误。
我不太懂VB.net的语法,多多包涵!

#10


vb没有匿名方法,偏偏你用的又不是.net framework 3.5,不能用lambda表达式,那就只能这样了:

    Sub SomeMethod()
        '某些操作之后
        If myList.Exists(New Predicate(Of ListItem)(AddressOf MyListPredicate)) Then
            i += 1
            Continue For
        End If
        '继续某些操作
    End Sub

    Public Function MyListPredicate(ByVal c As ListItem) As Boolean
        Return c.Location = strLocation
    End Function

#11


to ojlovecd

谢谢!你的方法可用~!
不过把断言移出去之后,strLocation的值就无效了,当然可以把strLocation设置成一个全局静态的变量来解决这个问题,但是这样做好像不严谨,不知道能不能把局部变量strLocation作为参数传递到断言函数里面呢?我自己试了几试都没弄出来~~没有办法也没有关系啦,纯属讨论一下,呵呵~!

再次感激!

#12


引用 11 楼 silentwins 的回复:
to ojlovecd

谢谢!你的方法可用~!
不过把断言移出去之后,strLocation的值就无效了,当然可以把strLocation设置成一个全局静态的变量来解决这个问题,但是这样做好像不严谨,不知道能不能把局部变量strLocation作为参数传递到断言函数里面呢?我自己试了几试都没弄出来~~没有办法也没有关系啦,纯属讨论一下,呵呵~!

再次感激!

呵呵,我就知道这个strLocation的问题肯定会暴露出来的,其实在回你的帖子之前我也有考虑过该怎样把局部变量传到断言方法里,但也没找到合适的方法,毕竟vb.net没有匿名方法,用lambda表达式倒是可以,但.net 2.0不支持,so,我也没办法了,看看有没有高人能解决吧~~~

#13


明白,谢谢^_^!