将嵌套在ForEach循环中的for循环转换为LINQ

USS*_*ana 3 c# linq

我在以下代码中收到编译错误"并非所有代码路径返回值",为什么?!

 public class SomeEntity
    {
        public int m_i;
        public SomeEntity(int i)
        {
            m_i = i;
        }

        public override string ToString()
        {
            return m_i.ToString();
        }


        public static int someFunction(int i) { return i + 100; }

        public static IEnumerable GetEntities()
        {
            int [] arr = {1,2,3};
            foreach (int i in arr)
            {

                //        for (int i = 0; i < someArray.Count();i++)
                //            yield return new SomeEntity(someFunction(i));

                // *** Equivalent linq function ***    
                return Enumerable.Range(0, 7).Select(a => new SomeEntity(someFunction(a)));
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我似乎无法解决这个问题......我尝试将外部foreach循环转换为linq表达式

public static IEnumerable GetEntities()
        {
            int [] arr = {1,2,3};

            return arr.Select(Xenv =>
                 Enumerable.Range(0, 7).Select(a => new SomeEntity(someFunction(a)))
                );
        }
Run Code Online (Sandbox Code Playgroud)

但后来我得到一个错误:/

Phi*_*gan 6

因为arr可能是空的,你不会在foreach循环内返回.在foreach循环之后放回一个.

public static IEnumerable GetEntities()
{
    int[] arr = { 1, 2, 3 };
    foreach (int i in arr)
    {

        //        for (int i = 0; i < someArray.Count();i++)
        //            yield return new SomeEntity(someFunction(i));

        // *** Equivalent linq function ***    
        return Enumerable.Range(0, 7).Select(a => new SomeEntity(someFunction(a)));
    }
    return Enumerable.Empty<int>(); // <<<< this is what you need
}
Run Code Online (Sandbox Code Playgroud)