The IEnumerable & lt; T & gt; function with a more efficient output than the & lt; T & gt; function?

advertisements

I am coding a C# forms application, and would like to know if the following two functions achieve the same result:

public List<object> Method1(int parentId)
{
    List<object> allChildren = new List<object>();
    foreach (var item in list.Where(c => c.parentHtmlNodeForeignKey == parentId))
    {
        allChildren.Add(item);
        allChildren.AddRange(Method1(item.id));
    }
    return allChildren;
}
public IEnumerable<object> Method2(int parentId)
{
    foreach (var item in list.Where(c => c.parentHtmlNodeForeignKey == parentId))
    {
        yield return item;
        foreach (var itemy in Method2(item.id))
        {
            yield return itemy;
        }
    }
}

Am I correct in saying that the Method1 function is more efficient than the Method2?

Also, can either of the above functions be coded to be more efficient?

EDIT

I am using the function to return some objects that are then displayed in a ListView. I am then looping through these same objects to check if a string occurs.

Thanks.


This highly depends on what you want to do. For example if you use FirstOrDefault(p => ....) the yield method can be faster because it's not required to store all the stuff into a list and if the first element is the right one the list method has some overhead ( Of course the yield method has also overhead but as i said it depends ).

If you want to iterate over and over again over the data then you should go with the list.