在LINQ Where中使用带有AddressOf的NOT运算符

时间:2015-10-01 16:00:07

标签: vb.net linq

我想知道在使用引用方法作为函数时是否有在LINQ Where语句中使用布尔NOT运算符的方法,因为我认为总是有方法或布尔测试尽可能检查是否为正数(例如,最好命名一个布尔变量/方法 IsHappy IsMad ,而不是 NotIsHappy

到目前为止,我有以下代码:

Dim DynClass As Object
Dim propInfos As List(Of PropertyInfo)
...
'determine all our current properties which are not primitives or strings
propInfos = DynClass.GetType.GetProperties.Where(AddressOf NotIsPrimitiveOrStringType).ToList

然后是Where:

引用的方法
Public Function IsPrimitiveOrStringType(p As PropertyInfo) As Boolean
    Return Not p.PropertyType.IsPrimitive And Not p.PropertyType.Name = GetType(String).Name
End Function
Public Function NotIsPrimitiveOrStringType(p As PropertyInfo) As Boolean
    Return Not IsPrimitiveOrStringType(p)
End Function

DynClass可以是任何对象,并传递给方法。

有没有更优雅的方法来实现这一点,因为我需要在我的应用程序的其他地方重用IsPrimitiveOrStringType功能?

1 个答案:

答案 0 :(得分:5)

您可以使用Lambda expression来使用普通Not运算符:

propInfos = DynClass.GetType.GetProperties.Where(Function(p) Not IsPrimitiveOrStringType(p)).ToList