如何使函数返回IEnumerable <string>而不是C#</string>中的字符串

时间:2012-05-20 06:04:50

标签: c#

我有以下函数返回一个字符串:

public static string GetFormattedErrorMessage(this Exception e)
{
    if (e == null)
    {
        throw new ArgumentNullException("e");
    }

    var exError = e.Message;
    if (e.InnerException != null)
    {
        exError += "<br>" + e.InnerException.Message;
        if (e.InnerException.InnerException != null)
        {
            exError += "<br>" + e.InnerException.InnerException.Message;
        }
    }

    return exError;
}

有人可以帮忙并告诉我如何使这个功能只返回IEnumerable<string>只有一个元素吗?

5 个答案:

答案 0 :(得分:8)

public static IEnumerable<string> GetFormattedErrorMessage(this Exception e)
        {
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }

            var exError = e.Message;
            if (e.InnerException != null)
            {
                exError += "<br>" + e.InnerException.Message;
                if (e.InnerException.InnerException != null)
                {
                    exError += "<br>" + e.InnerException.InnerException.Message;
                }
            }

            yield return exError;
        }

答案 1 :(得分:4)

为什么不直接返回数组?它就像return new string[] { exError };

一样简单

我不明白为什么人们使用大炮来杀死苍蝇,但你真的在这里不需要yield ......

我还应该注意:

  • yield可能不会

  • yield (不是很多,但它就在那里)

答案 2 :(得分:0)

你应该使用yield return语句来实现这一点。

public static IEnumerable<string> GetMessage(Exception e)
{
    yield return e.Message;
}

答案 3 :(得分:0)

你可以像其他人一样向你展示yield return,但我认为由于幕后发生的事情,这有点过分。

为什么不用一个元素创建一个List<String>并返回?这是一个IEnumerable<String>

答案 4 :(得分:0)

我可以看到你只想要IEnumerable中的一个元素,但是我无法理解为什么你想要一个IEnumerable。

如果你想要异常的每条消息及其内部异常,你应该这样做:

public static IEnumerable<string> GetErrorMessages(this Exception e) 
{ 
    if (e == null) 
        throw new ArgumentNullException("e"); 

    yield return e.Message;

    Exception inner = e.InnerException;
    while(inner != null)
    {
        yield return inner.Message; 
        inner = inner.InnerException;
    }
}