如何使函数返回 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>
吗?
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;
}
}