mom*_*aaa 4 c# ienumerable casting
object selectedDataItem;
MyClass.Inventory inventory;
inventory = (MyClass.Inventory) selectedDataItem;
Run Code Online (Sandbox Code Playgroud)
在inventory我们可以看到的细节如下:
Trace.Writeline(inventory.Name + " " + inventory.Place);
Run Code Online (Sandbox Code Playgroud)
你看库存有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;
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做,错误是
无法将类型为"MyClass.Inventory"的对象强制转换为"System.Collections.Generic.IEnumerable`1 [MyClass.Inventory]".
Eni*_*ity 11
这样做:
var enumerable = new [] { inventory };
Run Code Online (Sandbox Code Playgroud)
不知道你为什么需要这个,但是一旦我看到下一个扩展方法:
public static class CustomExtensions
{
public static IEnumerable<T> ToEnumerable<T>(this T input)
{
yield return input;
}
}
Run Code Online (Sandbox Code Playgroud)
inventory是类的实例,MyClass.Inventory而不是可枚举列表,因此您可以直接对其进行转换。如果你真的想要一个带有该对象的枚举,那么你需要创建一个空的枚举并将该对象添加到它。
更新
您必须先创建一个List并将您的对象添加到该列表中,因为,
List<MyClass.Inventory> lst = new List<MyClass.Inventory>();
lst.Add(inventory);
Run Code Online (Sandbox Code Playgroud)
然后你可以将你的列表分配给可枚举的,作为
IEnumerable<MyClass.Inventory> enumerable = lst;
Run Code Online (Sandbox Code Playgroud)
一般来说,这是一个不好的做法。如果您正在处理的数据不可迭代,那么将其设置为IEnumerable没有意义。
另一方面,如果您仍然想使用IEnumerable<T>,请使用List<T>,将您的对象存储在其中,然后进行LINQ查询!
| 归档时间: |
|
| 查看次数: |
17516 次 |
| 最近记录: |