4

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

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>只返回一个元素吗?

4

5 回答 5

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;
        }
于 2012-05-20T06:13:33.203 回答
4

为什么不只返回一个数组?这很简单return new string[] { exError };

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

我还应该注意:

  • yield可能无法达到您的预期

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

于 2012-05-20T06:58:19.050 回答
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;
    }
}
于 2012-05-20T07:53:54.437 回答
0

您可以yield return像其他人向您展示的那样使用,但我认为这有点矫枉过正,因为幕后发生的事情。

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

于 2012-05-20T06:55:29.320 回答
0

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

public static IEnumerable<string> GetMessage(Exception e)
{
    yield return e.Message;
}
于 2012-05-20T06:14:46.380 回答