我有一種情況,我正在使用三元運算符來確定IEnumerable是否爲null,並且它不像我所期望的那樣運行。爲什麼我會在'if'和linq之間看到不同的行爲?
如果我這樣做:
var children = clickedItem.Children != null ? clickedItem.Children.ToArray() : null;
然後我收到的參數無效異常(「源不能爲空」),這表明.ToArray()
儘管發生空校驗。
如果我改變了到(貌似)相同的邏輯:
var children = clickedItem.Children;
if (children != null) children = children.ToArray();
則誤差消失。三元操作員是否像我一直想象的那樣不會短路?
編輯%的問題:
是的,我設置的孩子在第一時間,而不是第二:
public IEnumerable<AlbumOrTrack> Children
{
get
{
if (_children == null)
{
_children = _dataAccess.GetChildren(this);
}
return _children;
}
}
和異常在.ToArray)發生(電話。我越來越
// Exceptions:
// System.ArgumentNullException:
// source is null.
(從元數據)
*如果*你得到的例外呢? – 2012-07-25 15:57:59
你有'clickedItem.Children'的實現嗎? – Jodrell 2012-07-25 16:04:10