我有类型引用A
和B
,但我想要ICollection<A>
的名称,这是B
的属性。如果我只有这两种类型,我如何获得集合名称"BunchOfX"?
public class X
{
}
public class Y
{
public virtual ICollection<X> BunchOfX { get; set; }
}
我需要一些东西,可以给我的属性名"BunchOfX"当我所有的类型引用A和B,让我们说,A将引用的类型ICollection<>保存,B将引用的类型ICollection<>是定义在
var entityType = Type.GetType(nameSpace + "." + entityTypeName);
var foreignType = Type.GetType(nameSpace + "." + foreignTypeName);
var names = foreignType.GetProperties()
.Where(p => typeof(ICollection<entityType>).IsAssignableFrom(p.PropertyType))
.Select(p => p.Name);
var foreignCollectionName = names.FirstOrDefault();
entityType给出"type or namespace unknown"
,当它在<>
基于Jon和Ani回复的解
var foreignCollectionName = foreignType.GetProperties()
.Where(p => typeof(ICollection<>)
.MakeGenericType(entityType)
.IsAssignableFrom(p.PropertyType))
.Select(p => p.Name).FirstOrDefault();
您需要查看带有反射的属性。最简单的方法是使用LINQ:
var names = typeOfB.GetProperties()
.Where(p => p.PropertyType == typeof(desiredPropertyType))
.Select(p => p.Name);