我有一个基类Part
和衍生类如Wire
或Connector
和更多从Part
继承。howto通过各种类型的属性搜索
现在我想实现一个搜索函数,该函数可以搜索派生类的所有属性中的字符串。
如果需要,应尝试将字符串转换为属性的类型。属性也可以是列表,应该在第一级搜索。
class Part
{
public int Id { get; set; }
public string Name { get; set; }
}
class Wire : Part
{
public NumberWithUnit Diameter { get; set; }
public Weight Weight { get; set; }
}
class Connector : Part
{
public List<Part> ConnectedParts { get; set; }
}
我知道怎么一般通过基本类型的属性与反射搜索这样
private bool SearchProperties<T>(T part, string searchString) where T : Part
{
var props = typeof(T).GetProperties();
foreach (var prop in props)
{
var value = prop.GetValue(part);
if (value is string)
{
if (string.Equals(value, searchString))
return true;
}
else if (value is int)
{
int v;
if (int.TryParse(searchString, out v))
{
if(v == (int) value)
return true;
}
}
}
return false;
}
但是,这将是种很长的名单,我有Weight
类型的属性,例如,许多更多。有没有一种通用的方式来搜索而不用投射所有类型?
可能会有点麻烦,但是我认为像'IStringSearchable'接口定义为非原始类型会有所帮助。可能有更好的解决方案,但不需要触及每个课程。 – ryanyuyu
如果被检查的对象包含复杂类型的属性,是否也意味着检查其属性?我在问,因为在这个问题中,你正在使用短语“派生**类的所有属性”。 –
派生类我的意思是从'Part'继承的所有类。但是对于一个复杂的类型来说,检查所有的属性也是很好的,但是只能这么做。 –