如果我例如有這樣的方法:Enumerable.Empty列出
IEnumerable<int> GetRandomNumbers()
{
// {Codes that generate numbers as List<int>}
if(generationFails == true)
{
return Enumberable.Empty<int>(); // I do this to signal that we have an error
}
return numbers;
}
在調用方法我做的:
IEnumerable<int> AddNumber(int number)
{
var random = GetRandomNumbers();
var randomList = random as IList<int> ?? random.ToList(); // Run ToList only if needed
randomList.Add(number);
return randomList;
}
,當生成失敗我得到一個異常「[NotSupportedException異常:收藏是一個固定的大小。]「。
這是因爲Enumerable爲IList,所以.ToList()沒有運行,然後我試圖添加到一個固定的Enumberable.Empty中。我錯誤地認爲這是不好的設計,繼承IList的對象(其中添加了定義)應該支持添加?
我被迫做var randomList = random.ToList()
或停止使用Enumberable.Empty
?有更好的方法嗎?
更新: 我想我在我的例子中不清楚。我希望吞下(或記錄)錯誤,但允許操作繼續而不會崩潰。我的評論「我這樣做是爲了表明我們有錯誤」是爲了告訴其他開發人員閱讀代碼,這是一種不正常的行爲。
對蒂姆聯繫的問題answer是我所瞭解的。似乎我們只是沒有固定集合的接口,所以使用IList
。
你爲什麼不簡單地引發異常? 'Enumerable.Empty'是發信號錯誤的最糟糕的方式。 – Sven
你可以隨時讓GetRandomNumbers返回一個布爾值,並輸出列表,然後你可以檢查GetRandomNumbers是否被成功賦值 –
JsonStatham