将对象强制转换为IEnumerable
本文关键字:IEnumerable 转换 对象 | 更新日期: 2023-09-27 18:04:16
object selectedDataItem;
MyClass.Inventory inventory;
inventory = (MyClass.Inventory) selectedDataItem;
在inventory
中,我们可以看到如下细节:
Trace.Writeline(inventory.Name + " " + inventory.Place);
你看存货有存货。名称,库存。我想在IEnumerable或ObservableCollection中包装所有属性的地方,这样我就可以一次迭代所有库存,而不是通过库存。名称,库存。
我如何使库存IEnumerable
,以便我可以做这样的事情:
IEnumerable<MyClass.Inventory> enumerable = (IEnumerable<MyClass.Inventory>) inventory;
enumerable = from x in enumerable where x.Name == inventory.Name select x;
现在如果我这样做错误是
无法强制转换"MyClass"类型的对象。1[MyClass.Inventory]'.
就这样做:
var enumerable = new [] { inventory };
不知道为什么需要这个,但是一旦我看到下一个扩展方法:
public static class CustomExtensions
{
public static IEnumerable<T> ToEnumerable<T>(this T input)
{
yield return input;
}
}
inventory
是MyClass.Inventory
类的一个实例,它不是一个可枚举列表,所以你可以直接转换它。如果你真的想要一个带有该对象的可枚举对象,那么你需要创建一个空的可枚举对象,并将该对象添加到其中。
你必须首先创建一个List
,并将你的对象添加到该列表中,如
List<MyClass.Inventory> lst = new List<MyClass.Inventory>();
lst.Add(inventory);
然后你可以将列表赋值给可枚举对象,如
IEnumerable<MyClass.Inventory> enumerable = lst;
参考一般来说,这是一个不好的做法。如果你正在处理的数据是不可迭代的,那么将其设置为IEnumerable
是没有意义的。
另一方面,如果您仍然想使用IEnumerable<T>
,请使用List<T>
,将您的对象存储在其中,然后执行LINQ
查询!