将对象强制转换为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]'.

将对象强制转换为IEnumerable

就这样做:

var enumerable = new [] { inventory };

不知道为什么需要这个,但是一旦我看到下一个扩展方法:

public static class CustomExtensions
{
    public static IEnumerable<T> ToEnumerable<T>(this T input)
    {
        yield return input;
    }
}

inventoryMyClass.Inventory类的一个实例,它不是一个可枚举列表,所以你可以直接转换它。如果你真的想要一个带有该对象的可枚举对象,那么你需要创建一个空的可枚举对象,并将该对象添加到其中。

你必须首先创建一个List,并将你的对象添加到该列表中,如

List<MyClass.Inventory> lst = new List<MyClass.Inventory>();
lst.Add(inventory);

然后你可以将列表赋值给可枚举对象,如

IEnumerable<MyClass.Inventory> enumerable = lst;
参考

一般来说,这是一个不好的做法。如果你正在处理的数据是不可迭代的,那么将其设置为IEnumerable是没有意义的。

另一方面,如果您仍然想使用IEnumerable<T>,请使用List<T>,将您的对象存储在其中,然后执行LINQ查询!

相关文章: