2 回答
TA贡献1799条经验 获得超8个赞
MakeTree和Bush其他具有Fruit属性 implement的子类,IHasFruit如下所示:
interface IHasFruit {
// I assume "Fruit" properties are of type "Fruit"?
// Change the type to whatever type you use
Fruit Fruit { get; }
}
class Tree : Detail, IHasFruit {
...
}
class Bush : Detail, IHasFruit {
...
}
现在,您可以编写一个GetFruit方法:
public Fruit GetFruit(int index) {
Detail detail = details[index];
return (detail as IHasFruit)?.Fruit; // this will return null if the detail has no fruit.
}
TA贡献1946条经验 获得超4个赞
您也可以为提供水果的类提供 IHasFruit 接口,然后您可以通过您的接口循环。
IHasFruit [] myArray
或者如果您需要使用
Detail[] myArray
foreach (var item in myArray)
{
If (item is IHasFruit hasFruit)
//do whatever
}
或反射(较慢)
Detail[] myArray
foreach (var item in myArray)
{
var hasFruit= item.GetType().GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IHasFruit<>));
}
或者,如果您不想以任何方式使用界面。您可以使用
İtem.GetType().GetProperty("propertyName") ...
- 2 回答
- 0 关注
- 142 浏览
添加回答
举报