【发布时间】:2011-11-10 04:18:48
【问题描述】:
我有类型引用 A 和 B,但我想要 ICollection<A> 的名称,它是 B 的属性。如果我只有这两种类型,如何获取集合名称“BunchOfX”?
public class X
{
}
public class Y
{
public virtual ICollection<X> BunchOfX { get; set; }
}
当我只有类型引用 A 和 B 时,我需要一些可以给我属性名称“BunchOfX”的东西。假设 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();
【问题讨论】:
-
您很可能必须通过反射来完成,还是您要求特定的代码才能找到它?
-
您是说您想调用
Method(b.BunchOfA)并且能够让Method知道它是在一个名为BunchOfA的属性中传递的吗? -
@R0MANARMY 我想到了反射,但我完全是 .NET 的初学者 - 特定的代码将是理想的。如果它非常复杂,那么指出正确的方向也会有所帮助。感谢您的回复!
-
@Gabe 我不确定你的意思。但我认为我以错误的方式提出了这个问题,所以我对其进行了编辑。感谢您的回复!
标签: c# .net generics reflection properties