我有一個方法可以檢查項目列表,並在方法中的條件滿足時返回項目。問題是,有時我需要返回多個項目才能在屏幕上繪製。所以如果我有2或3個需要繪製的項目,只有第一個是。這可能是我的繪圖代碼的問題,但我還不確定。返回多個對象
foreach(Item i in List)
{
if conditions are met
{
return i
有沒有辦法來檢查此方法中返回多個項目?
我有一個方法可以檢查項目列表,並在方法中的條件滿足時返回項目。問題是,有時我需要返回多個項目才能在屏幕上繪製。所以如果我有2或3個需要繪製的項目,只有第一個是。這可能是我的繪圖代碼的問題,但我還不確定。返回多個對象
foreach(Item i in List)
{
if conditions are met
{
return i
有沒有辦法來檢查此方法中返回多個項目?
爲什麼不使用LINQ?
// return an enumerable
return items.Where(item => item.SomeCondition);
或者
// execute once and store in a list
return items.Where(item => item.SomeCondition).ToList();
有這兩個例子之間的重要區別。第一個返回可用於遍歷列表的IEnumerable
。第二個例子遍歷這些項目並將它們存儲在一個列表中。
這也是yield
的候選人。像第一個例子一樣,這返回IEnumerable<T>
。
foreach(var item in items)
{
if(conditions){
yield return item;
}
}
+1但我建議如果OP是C#的新手,在學習'yield'之前堅持LINQ&collections的基礎知識:) – 2014-10-09 03:26:06
@RobertLevy - 絕對同意。我還添加了一些關於延遲執行的信息,如果不理解,可能會導致微妙的錯誤。 – 2014-10-09 03:42:56
我將不得不考慮使用收益率。我從來沒有見過它 – 2014-10-09 03:47:04
您可以通過返回滿足條件的項目清單做這樣的事情:
List<YourItemType> itemsMeetingCondition = new List<YourItemType>();
foreach(Item i in List)
{
if(conditions are met)
{
itemsMeetingCondition.Add(i);
}
}
return itemsMeetingCondition;
第一種方式是使一個類有2個或多個屬性。
這裏將是一個回報類:
public class ColorSelection
{
public string ColorCode { get; set; }
public bool IsBold { get; set; }
}
在你的代碼會在某個時候回到這一點。
如果它們都是同一類型,則使用第二種方法。例如,您將返回一個List<string>
。
可以使用yield關鍵字並返回IEnumerable的,而不是:
產量與交互脫穎而出ACH-循環。這是一個上下文關鍵字: yield僅在某些語句中是關鍵字。它只允許在需要時生成foreach循環中的每個 迭代。以這種方式 它可以提高性能。
http://www.dotnetperls.com/yield
public IEnumerable<Item> GetItems()
{
foreach(Item i in List)
{
if conditions are met
{
yield return i;
}
}
}
只要return語句被擊中,在函數結束。所以你的代碼只會返回一個項目,如果它發現它。你可能想要找到你找到的單獨的匹配列表,然後返回。 – Abbath 2014-10-09 03:11:04
因此,我不會將該項目返回,而是將其添加到列表並從該列表中繪製? – 2014-10-09 03:12:01
是的,只需在函數的開頭創建一個新列表,併爲每個找到的匹配添加一個新列表。在完成對原始列表的迭代後,返回匹配列表。你也應該稍後檢查一下,返回的列表不是空的。 – Abbath 2014-10-09 03:13:28