这是我的代码
public class MaterialRepository<T> where T : Material, new()
{
public List<T> ListMaterial { get; set; }
public MaterialRepository(List<T> listMaterial)
{
ListMaterial = new List<T>();
ListMaterial = listMaterial;
}
public T SearchMaterial(T inputMaterial)
{
T resultMaterial = new T();
if (typeof(T) == typeof(BendingMaterial))
{
//do something here
}
return resultMaterial;
}
我的问题是如何将resultMaterial转换为Material的特定派生类(BendingMaterial)? 并且在 //在这里做点什么...... 部分,如果ListMaterials是通用的,如何使用BendingMaterial特定属性在ListMaterials中找到BendingMaterial?
答案 0 :(得分:0)
尝试
BendingMaterial m = (BendingMaterial)(object)mrep.SearchMaterial(inpm);
和
List<BendingMaterial> b = ListMaterial.OfType<BendingMaterial>().ToList();
答案 1 :(得分:0)
假设你有类似这样的类,有其他属性,方法和你有什么:
public class Material
{
public decimal Density { get; set; }
}
public class BendingMaterial : Material
{
public string Bendability { get; set; }
}
public class OtherMaterial : Material
{
public bool IsOther { get; set; }
}
然后在您的方法中,您可以编写这样的代码来获取List of Material对象中各个列表项的子类型,并访问它们的特定属性和方法。这应该适用于列表T,即使您没有使用where T:Material约束,因为即使您将Checkbox或对象放入纯粹的通用列表中,“if(m is BendingMaterial”将匹配预期的Material反对并处理它。
List<T> ListMaterial = new List<Material>();
ListMaterial .Add(new BendingMaterial());
ListMaterial .Add(new OtherMaterial());
foreach (Material m in ListMaterial )
{
if (m is BendingMaterial)
{
string x = (m as BendingMaterial).Bendability;
}
if (m is OtherMaterial)
{
bool y = (m as OtherMaterial).IsOther;
}
}
//more code