如果有兩個對象,ObjectA和ObjectB都從AbstractObject繼承,並且繼承AbstractObject的集合。 linq語句看起來像在我選擇特定類型集合中的所有對象的位置。恩。是這樣的:查詢集合中的特定對象類型
var allBs = from b in collection where type == ObjectB select b;
如果有兩個對象,ObjectA和ObjectB都從AbstractObject繼承,並且繼承AbstractObject的集合。 linq語句看起來像在我選擇特定類型集合中的所有對象的位置。恩。是這樣的:查詢集合中的特定對象類型
var allBs = from b in collection where type == ObjectB select b;
您可以使用Enumerable.OfType:
var allBs = collection.OfType<ObjectB>();
這給你的所有元素,其中的類型是澆注到ObjectB
。如果你想要的是ObjectB
類型只對象:
var allBs = collection.Select(i => i.GetType() == typeof(ObjectB));
,或者:
var allBs = from b in collection
where b.GetType() == typeof(ObjectB)
select b;
很簡單:
IEnumerable<ObjectB> allBs = collection.OfType<ObjectB>();
或者:
IEnumerable<AbstractObject> allBy = from b in collection
where b is ObjectB
select b;
的第二個查詢保留相同的枚舉作爲集合的可持續類型,第一個隱含地投射到IEnumerable<ObjectB>
。
您可以使用這些替代方法將第二個查詢轉換爲IEnumerable<ObjectB>
。
IEnumerable<ObjectB> allBs = (from b in collection
where b is ObjectB
select b).Cast<ObjectB>();
IEnumerable<ObjectB> allBs = from b in collection
where b is ObjectB
select b as ObjectB;
這實際上有一個稍微不同的結果比OP問什麼...... – 2010-09-08 01:19:38
@「裏德·科普塞」 - 我覺得OP是有點曖昧是否是一個類型的所有對象,包括衍生類型或排除派生類型。假設代碼'b是ObjectB',即使'b'是從'ObjectB'派生出來的,我也會用「included」的含義返回true。這是你所做的一點嗎? – Enigmativity 2010-09-08 01:28:30