簡體   English   中英

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

[英]How can I make a function return IEnumerable<string> instead of a string in 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>嗎?

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 };一樣簡單return new string[] { exError };

我不明白為什么人們使用大炮殺死蒼蠅,但你真的不需要yield ......

我還應該注意:

  • yield可能達不到你的預期

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

你應該使用yield return語句來實現這一點。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM