我有类型参考A
和B
,但我希望ICollection<A>
的名称是B
的属性。如果我只有两种类型,如何获得集合名称“BunchOfX”?
public class X
{
}
public class Y
{
public virtual ICollection<X> BunchOfX { get; set; }
}
当我所拥有的是类型引用A和B时,我需要一些可以给我属性名称“BunchOfX”的东西。假设A将引用ICollection&lt;&gt;的类型。保持,B将引用ICollection&lt;&gt;的类型定义于。
真实代码
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在&lt;&gt;
中时会显示"type or namespace unknown"
基于Jon和Ani的回复的解决方案
var foreignCollectionName = foreignType.GetProperties()
.Where(p => typeof(ICollection<>)
.MakeGenericType(entityType)
.IsAssignableFrom(p.PropertyType))
.Select(p => p.Name).FirstOrDefault();
答案 0 :(得分:4)
您需要使用反射查看属性。最简单的方法是使用LINQ:
var names = typeOfB.GetProperties()
.Where(p => p.PropertyType == typeof(desiredPropertyType))
.Select(p => p.Name);