受到另一个询问失踪问题的启发 Zip功能的:
为什么课堂上没有ForEach扩展方法Enumerable?还是在任 唯一获得ForEach方法的类是List<>.有没有理由错过(表演)?
所以我经常遇到这种情况... Do.Something(...)返回一个null集合,如下所示:
int[] returnArray = Do.Something(...);
Run Code Online (Sandbox Code Playgroud)
然后,我试着像这样使用这个集合:
foreach (int i in returnArray)
{
// do some more stuff
}
Run Code Online (Sandbox Code Playgroud)
我只是好奇,为什么foreach循环不能对null集合进行操作?对我来说似乎合乎逻辑的是,0迭代将使用null集合执行...而是抛出一个NullReferenceException.任何人都知道为什么会这样?
这很烦人,因为我正在处理那些不确定它们返回的API,所以我最终if (someCollection != null)到处都是......
编辑:谢谢大家解释foreach使用GetEnumerator,如果没有枚举器,foreach会失败.我想我问为什么语言/运行时在抓取枚举器之前不能或不会进行空检查.在我看来,这种行为仍然会得到很好的定义.
有没有更好的方法来执行以下操作:
我需要在继续循环之前检查file.Headers上的null
if (file.Headers != null)
{
foreach (var h in file.Headers)
{
//set lots of properties & some other stuff
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,由于我的代码中发生缩进的程度,因此将foreach写入if中看起来有点难看.
是值得评价的东西
foreach(var h in (file.Headers != null))
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
可能?
我已经看到很多关于这个问题的讨论,但也许我只是太多的新手才能得到它.如果我有一个可观察的集合,它是msdn示例中的"PersonNames"集合(http://msdn.microsoft.com/en-us/library/ms748365.aspx),如果a PersonName是,我会获得对View的更新添加或删除等.当我更改属性时,我想获得我的视图的更新PersonName.就像我改名字一样.我可以OnPropertyChanged为每个属性实现并让这个类派生出来INotifyPropertyChanged,并且似乎按预期调用.我的问题是,View如何从ObservableCollection更改属性获取更新数据不会导致任何事件ObservableCollection.这可能是非常简单的事情,但为什么我似乎无法找到一个令我惊讶的例子.任何人都可以为我阐明这一点,或者对示例有任何指示我会非常感激.我们在当前的WPF应用程序的多个位置都有这种情况,并且正在努力搞清楚.
"通常,负责显示数据的代码会为PropertyChanged当前显示在屏幕上的每个对象添加一个事件处理程序."
有人可以举个例子说明这意味着什么吗?我查看结合我ViewModel其中有一个ObservableCollection.此集合由RowViewModel具有支持PropertiesChanged事件的属性组成.但我无法弄清楚如何使集合更新自己,以便更新我的视图.
我很迷惑。我认为启用 c# 8 和可为空的引用类型将阻止将 null 分配给不可为空的引用类型,但显然这只是编译时的警告,我知道您可以将其强制为错误并停止构建,但我认为这不仅仅是编译器检查。
看这个例子 https://dotnetfiddle.net/4eCs5L
如果运行,仍然可以将 null 分配给不可为 null 的引用类型,为什么在运行时不会抛出错误?
我的理解是什么都不会发生.
例如这段代码:
foreach (var some in (from u in possiblyNullCollection ) )
{
//
}
Run Code Online (Sandbox Code Playgroud)
应该守卫如下:
if ( possiblyNullCollection != null )
{
foreach (var some in (from u in possiblyNullCollection ) )
{
//
}
}
Run Code Online (Sandbox Code Playgroud)
或者查询空集合是否安全?