将对象转换为IEnumerable

时间:2014-05-21 05:28:54

标签: c# casting ienumerable

object selectedDataItem;
MyClass.Inventory inventory;
inventory = (MyClass.Inventory) selectedDataItem;

inventory中我们可以看到详细信息,例如:

Trace.Writeline(inventory.Name + " " + inventory.Place);

你看库存有inventory.Name,Inventory.Place我想包装IEnumerable或ObservableCollection中的所有属性,这样我就可以一次遍历所有库存而不是inventory.Name,inventory.Place等等...

如何制作广告资源IEnumerable以便我可以执行以下操作:

IEnumerable<MyClass.Inventory> enumerable = (IEnumerable<MyClass.Inventory>) inventory;
enumerable = from x in enumerable where x.Name == inventory.Name select x;

现在,如果我这样做,则错误是

  

无法将“MyClass.Inventory”类型的对象强制转换为“System.Collections.Generic.IEnumerable`1 [MyClass.Inventory]”。

4 个答案:

答案 0 :(得分:10)

这样做:

var enumerable = new [] { inventory };

答案 1 :(得分:3)

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

<强>更新

您必须先创建List,然后将您的对象添加到该列表中,

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

然后您可以将列表分配给可枚举的

IEnumerable<MyClass.Inventory> enumerable = lst;

reference

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

总的来说,这是一种不好的做法。如果您处理的数据不可迭代,则将其设为IEnumerable毫无意义。

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