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

本文关键字:字符串 函数 何使 返回 IEnumerable string | 更新日期: 2023-09-27 18:34:47

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

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>吗?

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

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;
        }

为什么不直接返回一个数组?就像return new string[] { exError };一样简单

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

我还应该指出:

  • yield可能不会做你期望的事情

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

你应该使用收益率回报语句来实现这一点。

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

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

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

我可以看到你只需要一个元素在你的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;
    }
}