使用 VB.net Framework 4.8 我可以在类的所有属性中搜索给定值吗?如果有任何属性匹配,则返回该值

问题描述 投票:0回答:1

我说过我有这门课

Public Class People
     Public Property kids As List(Of String)
     Public Property first As String
     Public Property last As String
     Public Property age as Integer
End Class

Dim test As List(Of People) = PeopleList.Where(
 Function(p)
     Return p.first = sometextbox.text
 End Function
 ).ToList()

我知道我可以在各个属性中搜索如上所述的匹配项。 但我如何搜索每个属性以寻找潜在的匹配项。因此,假设第一个不匹配,但最后一个匹配,或者字符串列表与文本框匹配。我知道我可以使用 Or...Or..Or.. 来检查每个属性,但我的类要大得多并且需要可扩展。即:我不想为将来的每个新属性添加 OR 行。这可能吗?

'I have tried something like the below but feel like it is heading towards a dead end
 Dim properties As PropertyInfo() = GetType(People).GetProperties()
 for each prop in Propepreties
    prop.getvalue()

底线我想过滤对象列表并返回一个列表,其中包含任何属性与搜索条件匹配的所有对象,而不是仅检查一个属性。 让我知道你的想法

c# asp.net vb.net performance linq
1个回答
0
投票

您将无法摆脱混乱的 if/else 或 switch 语句。虽然您可以使用反射来获取该类型的属性集合,甚至读取它们的值,但您仍然需要手动检查结果的类型以了解执行诸如下降到

kids
列表或获取字符串表示形式之类的操作
age

如果是我,我会在

bool IsMatch(string)
类型中添加
People
方法,或者在自己的类型中添加
bool IsMatch(People, string)
方法,以解决更多问题。

© www.soinside.com 2019 - 2024. All rights reserved.