簡體   English   中英

將對象轉換為IEnumerable

[英]Cast object to 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]”。

這樣做:

var enumerable = new [] { inventory };

inventoryMyClass.Inventory類的一個實例,它不是一個可枚舉的列表,因此您可以直接轉換它。 如果你真的想要一個帶有該對象的枚舉,那么你需要創建一個空的可枚舉並將該對象添加到它。

更新

您必須首先創建一個List並將您的對象添加到該列表,因為,

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

然后你可以將你的列表分配給可枚舉,如

IEnumerable<MyClass.Inventory> enumerable = lst;

參考

不確定為什么你需要這個,但是一旦我看到下一個擴展方法:

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

一般來說,這將是一個不好的做法。 如果您正在處理的數據不可迭代,那么使其成為IEnumerable是沒有意義的。

另一方面,如果您仍想使用IEnumerable<T> ,請使用List<T> ,將對象存儲在其中,然后執行LINQ查詢!

演員收到 object 到列表<object>或 IEnumerable<object><div id="text_translate"><p> 我正在嘗試執行以下演員</p><pre>private void MyMethod(object myObject) { if(myObject is IEnumerable) { List&lt;object&gt; collection = (List&lt;object&gt;)myObject; ... do something } else {... do something } }</pre><p> 但我總是以以下異常結束:</p><p> 無法將“System.Collections.Generic.List 1[MySpecificType]' to type 'System.Collections.Generic.List</p><p> 我真的需要這個工作,因為這個方法需要非常通用才能接收單個對象和 collections 兩種未指定的類型。</p><p> 這是可能的,還是有另一種方法可以做到這一點。</p><p> 謝謝你。</p></div></object></object>

[英]Cast received object to a List<object> or IEnumerable<object>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM