我有一個基類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'繼承的所有類。但是對於一個複雜的類型來說,檢查所有的屬性也是很好的,但是隻能這麼做。 –