我有以下函数返回一个字符串:
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>
只有一个元素吗?
答案 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;
}
}