如何从对包含类型的引用中获取 ICollection<> 属性的名称?



我有类型引用AB,但我想要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);

相关内容

  • 没有找到相关文章