我想知道在使用引用方法作为函数时是否有在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功能?
答案 0 :(得分:5)
您可以使用Lambda expression来使用普通Not
运算符:
propInfos = DynClass.GetType.GetProperties.Where(Function(p) Not IsPrimitiveOrStringType(p)).ToList