我有一個類實現IEnumerable
,但不實現IEnumerable<T>
。我不能改變這個類,我不能用另一個類來代替它。正如我從MSDN LINQ can be used if class implements IEnumerable<T>
瞭解的。我試過使用instance.ToQueryable()
,但它仍然不啓用LINQ方法。我確定這個類可以包含只有一種類型的實例,所以這個類可以實現IEnumerable<T>
,但它不是。那麼,我可以做什麼來使用LINQ表達式來查詢這個類?LINQ是否可以使用IEnumerable?
59
A
回答
101
您可以使用Cast<T>()
或OfType<T>
來獲得完全支持LINQ的IEnumerable的通用版本。
例如,
IEnumerable objects = ...;
IEnumerable<string> strings = objects.Cast<string>();
或者,如果你不知道它包含什麼類型的,你總是可以做:
IEnumerable<object> e = objects.Cast<object>();
如果您非一般的IEnumerable
含有多種類型的對象,你只能在如感興趣。琴絃,你可以這樣做:
IEnumerable<string> strings = objects.OfType<string>();
9
是的,它可以。您只需使用Cast
函數將其轉換爲鍵入的IEnumerable<T>
。例如
IEnumerable e = ...;
IEnumreable<object> e2 = e.Cast<object>();
現在e2
是IEnumerable<T>
,可與所有LINQ職能的工作。
3
您還可以使用LINQ的查詢理解語法,強制轉換爲範圍變量的類型(item
在這個例子中)如果指定類型:
IEnumerable list = new ArrayList { "dog", "cat" };
IEnumerable<string> result =
from string item in list
select item;
foreach (string s in result)
{
// InvalidCastException at runtime if element is not a string
Console.WriteLine(s);
}
效果與@ JaredPar的解決方案相同;有關詳細信息,請參見C#語言規範中的7.16.2.2:顯式範圍變量類型。
-1
是這樣做,
我給你簡單的例子,以更好地瞭解您
List<Student> obj = new List<Student>();
obj.Add(new Student() { name = "xyz", roll = 12, school = "pqr" });
obj.Add(new Student() { name = "xyz", roll = 12, school = "pqr" });
obj.Add(new Student() { name = "xyz", roll = 12, school = "pqr" });
obj.Add(new Student() { name = "xyz", roll = 12, school = "pqr" });
obj.Add(new Student() { name = "xyz", roll = 12, school = "pqr" });
IEnumerable<Student> students = from x in obj.AsEnumerable()
select x;
foreach (var item in students)
{
MessageBox.Show(item.name);
}
class Student
{
public string name { get; set; }
public int roll { get; set; }
public string school { get; set; }
}
+0
'List
相關問題
- 1. 是否可以在IEnumerable <T>上使用Microsoft.VisualStudio.QualityTools.UnitTesting.CollectionAssert?
- 2. 是否可以使用automapper將ienumerable映射到bool?
- 3. IEnumerable Linq方法是否線程安全?
- 4. 我可以使用LINQ有條件地創建IEnumerable嗎?
- 5. 是否可以使用nhibernate envers使用Linq-to-SQL?
- 6. 是否可以使用LinQ評估可選標籤的存在?
- 7. 是否可以使用F#中的LINQ以及如何操作?
- 8. 排序IEnumerable的使用LINQ
- 9. Linq在C#中使用IEnumerable
- 10. 您可以使用linq查看兩個IEnumerable數據是否包含任何常用條目?
- 11. 是否可以在LINQPad中使用LINQ調用存儲過程?
- 12. 是否有可能使用linq
- 13. 是否可以使用Auto_publish?
- 14. 是否可以使用clock_settime()
- 15. 是否可以使用PHP
- 16. 是否可以使用HTML
- 17. 是否可以使用URL
- 18. 是否可以使用JavaScript
- 19. iPhone是否「可以使用」?
- 20. 是否可以使用ExtJS
- 21. 是否可以使用xtk_edge?
- 22. 是否可以使用WIX
- 23. IWavePlayer.PlaybackStopped是否可以使用?
- 24. 是否可以使用JavaScript
- 25. 是否可以使用jquery
- 26. ,是否可以使用Request.UserHostAddress?
- 27. 是否可以使用css
- 28. 是否可以在不拖放的情況下使用Linq-SQL?
- 29. 是否可以使用LINQ進行列表操作?
- 30. 是否可以使用LINQ to SQL與Oracle?
沒有鑄造了IEnumerable,而不是所有的LINQ方法,你只看到8種方法:AsQueryable已,Cast <>,Equals,GetEnumerator,GetHashCode,GetType,OfType <>,ToString – ShawnFeatherly