我有一个类用户,我也为同一个用户类 - 用户实现了一个集合。用户将存储用户对象。 users集合类实现泛型集合类 - 集合。
我想将LINQ查询结果转换为我的集合类的对象 - 用户。每次我尝试显式转换时,它都会给我一个不能类运行时异常。
我试图在我的用户集合类中实现iEnumerable接口,但仍然无法转换查询结果。
现在我必须在查询结果集中执行for循环,并填写我自己的自定义集合 - 用户。
请帮助我解决这个问题。 Sanjay Sachdev
答案 0 :(得分:2)
为什么不在Collection类中创建一个构造函数,该构造函数将IEnumerable作为参数并为您封装循环?在控制台应用程序中试试看看我的建议 - 在你的情况下,你会做一个集合 - 我只是使用int来轻松创建一个例子......
class Program
{
static void Main(string[] args)
{
MyCollection myCollection = new MyCollection(Enumerable.Range(1, 10));
foreach (var item in myCollection)
{
Console.WriteLine(item);
}
}
}
public class MyCollection : Collection<int>
{
public MyCollection(IEnumerable<int> input)
{
foreach (var item in input)
{
this.Add(item);
}
}
}
您还可以创建一个扩展方法,以便于使用...
public static class MyCollectionHelper
{
public static MyCollection ToMyCollection(this IEnumerable<int> input)
{
return new MyCollection(input);
}
}
然后你会这样称呼它......
MyCollection myCollection = Enumerable.Range(1,10).ToMyCollection();
答案 1 :(得分:1)
问题不是100%清楚您需要的,但是您是否尝试过Cast扩展方法?
答案 2 :(得分:0)
即使它们都实现了相同的接口,也无法将对象转换为非对象。
例如,您无法将int
数组投射到List<int>
事件中,尽管它们都实现了IEnumerable<int>
。您可以将其中任何一个强制转换为接口,但这不会更改对象的实际类型。该数组仍然是一个数组,它不能是一个列表。
因此,您必须遍历结果并将每个项目放入集合中。
当它是LINQ查询的结果时,还有另一个原因需要循环遍历结果。查询返回的内容不是具有完成结果的集合,而是在循环时创建结果的对象。因此,在循环之前,结果甚至不存在。