【问题标题】:Is it possible to return an item in a list, for use in another method?是否可以返回列表中的项目以用于另一种方法?
【发布时间】:2015-05-18 15:46:47
【问题描述】:

使用 Unity。

对不起,如果这看起来很荒谬,或者答案很明显。

我有一个 foreach 循环,它循环遍历列表中的某些项目,但只有某些对象受制于一组进一步的指令:

(randomValues 是一个 int 数组,里面存储了 7 个随机数,列表中的每一项都有一个 ID。)

foreach (var item in itemsList)
{
    if(randomValues.Contains(item.itemID))
    { 
        //Code not relevant.         
    }    
}

我想拿走任何使用过的物品并以另一种方法使用它们。所以我考虑将项目作为方法的参数传递出去,但后来意识到我不知道该怎么做,也不知道这样的事情是否可能。

【问题讨论】:

  • 不清楚您要做什么(或者 Unity 是否相关)。您是尝试将列表传递给此方法还是将item 传递给另一个方法?
  • othermethod(item)替换//Code not relevant
  • 尝试使用 Linq:类似itemsList.Where(item => randomValues.Contains(item.itemID))
  • @DmitryBychenko 如果循环中有大量逻辑并且如果在 foreach 循环之外调用它,则可能不适用,您将迭代两次。
  • 您遵循了正确的思维过程——通过返回值的子集,您增加了代码的模块化。通过让您的方法创建一个新对象并返回它,而不是修改全局集合,您可以使您的方法成为一个纯方法,这是一件很棒的事情。

标签: c# list methods parameters


【解决方案1】:

取决于您的对象/方法的结构。您需要将单个项目传递给方法吗?

foreach (var item in itemsList)
    if (randomValues.Contains(item.itemID))
        SomeOtherMethod(item);

您是否需要这个当前方法来将列表过滤为仅在以后应该传递给另一个方法的列表?

foreach (var item in itemsList)
    if (randomValues.Contains(item.itemID))
        yield return item;

您是否需要将此方法中的匹配项列表传递给另一个方法?

var matchingItems = new List<SomeType>();
foreach (var item in itemsList)
    if (randomValues.Contains(item.itemID))
        matchingItems.Add(item);
SomeOtherMethod(matchingItems);

或者甚至只使用 LINQ:

SomeOtherMethod(itemsList.Where(i => randomValues.Contains(i.itemID)));

等等……

【讨论】:

    【解决方案2】:

    给你,

    var tempList=new List<int>();//assuming int values in list    
    foreach (var item in itemsList)
    {
        if(randomValues.Contains(item.itemID))
        {
            tempList.Add(item); //add item to temp list
            //some code
        }
    }
    return tempList;
    

    【讨论】:

      【解决方案3】:

      var itemsCopy = itemsList.Where(i =&gt; randomValues.Contains(i.itemID)).ToList();

      【讨论】:

        【解决方案4】:

        您可以使用以下代码:

        return itemList.where (item => randomValues.Contains(item.itemID));
        

        我选择不使用 ToList() 以从惰性求值中受益。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-13
          • 1970-01-01
          • 1970-01-01
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 2015-10-09
          • 2012-12-02
          相关资源
          最近更新 更多