对于noobish问题很抱歉,我不知道linq,并且必须在不属于我的代码中扩展查询。
是否可以将两个不同方法调用结果的两个枚举连接成一个可枚举的?
var attibutes = from MemberDescriptor a in
(TypeDescriptor.GetProperties(this) **and** TypeDescriptor.GetEvents(this))
let attribute = a.Attributes[typeof(MyAttributeAttribute)]
as MyAttributeAttribute
where attribute != null
select new AttributeTuple { Property = a, Attribute = attribute };
非常感谢!
答案 0 :(得分:3)
您可以使用Enumerable.Concat
来连接两个IEnumerable<T>
序列,但是,在您的情况下,这两个对象的类型不同,因此如果不使用Enumerable.Cast<T>
,这将无法正常工作。
您可以通过以下方式将两者视为MemberDescriptor:
var search = TypeDescriptor.GetProperties(this).Cast<MemberDescriptor>()
.Concat(TypeDescriptor.GetEvents(this).Cast<MemberDescriptor>());
var attibutes = from MemberDescriptor a in search
let attribute = a.Attributes[typeof(MyAttributeAttribute)] as MyAttributeAttribute
where attribute != null
select new AttributeTuple { Property = a, Attribute = attribute };