[英]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.