将泛型变量转换为特定的类类型
本文关键字:类型 泛型 变量 转换 | 更新日期: 2023-09-27 18:21:37
这是我的代码
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?
假设您有这样的类,它们具有其他属性、方法和其他内容:
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对象中单个列表项的子类型,并访问它们的特定属性和方法。即使你没有使用where T:Material约束,这也应该适用于列表T,因为即使你将复选框或对象放入纯泛型列表,"如果(m是弯曲材料"将匹配预期的材料对象并相应地处理它。
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
尝试
BendingMaterial m = (BendingMaterial)(object)mrep.SearchMaterial(inpm);
和
List<BendingMaterial> b = ListMaterial.OfType<BendingMaterial>().ToList();