У меня есть ссылки на типы 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"
, когда он находится в <>
решении, основанном на ответах Джона и Ани
var foreignCollectionName = foreignType.GetProperties()
.Where(p => typeof(ICollection<>)
.MakeGenericType(entityType)
.IsAssignableFrom(p.PropertyType))
.Select(p => p.Name).FirstOrDefault();